Wannafly挑战赛26 B 冥土追魂
首先,证明结果一定是取某些整行,再加上一个多余的一行的前几个。
假如:
x1<=x2<=x3<=x4<=x5
y1<=y2<=y3<=y4<=y5
取6个,最优解是取x3,x4,x5,y3,y4,y5。那么:
(1)如果y3>=x2,那么y3+y4>=x1+x2。就取掉y3,y4取x1,x2更优。
(2)如果y3<x2,那x3就>y2,那就去掉x3,x4取y1,y2更优。
因此结果不会出现2行不整的。给出条件了,那么要取的整行的数量也确定了。多出来几个(记为k)也确定了。那用sum[i]记录该行取整行时,maxk[i]记录该行取最大的k个时的结果。问题在于,一行被作为整行了就不能作为前k个了。这样不能贪心,能举反例。
比如
1 1 1 1
0 0 0 5
取5个。
这样只能dp了。dp[i][j][0]记录前i行,取了j个整行,还没取多余行的最小。dp[i][j][1]记录前i行,取了j个整行,已经取多余行的最小。那么第i行能作为整行取,dp[i][j][0]=dp[i-1][j-1][0]+sum[i]。也能不取,说明i-1行时已经有j个整行了。也能作为多余行取。注意开始时将不能到的点解决一下,给个大的值。
//#pragma comment(linker,"/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #include<string> #include<cstring> #include<vector> #include<cmath> #include<queue> #include<stack> #include<map> #include<set> #include<algorithm> #include <stack> #include <iomanip> using namespace std; typedef long long lon; const lon SZ=527000,INF=0x7FFFFFFF; const double EPS=1e-8; vector<lon> vct[1010]; lon sum[1010],maxk[1010]; lon dp[1010][1010][2];int main() {//std::ios::sync_with_stdio(0);//freopen("d:\\1.txt","r",stdin); //for(;scanf("%d",&n)!=EOF;) {lon n,m,k;cin>>n>>m>>k;lon rem=k%m,num=k/m;for(lon i=1;i<=n;++i){vct[i].assign(m,0);for(lon j=0;j<m;++j)cin>>vct[i][j],sum[i]+=vct[i][j];sort(vct[i].begin(),vct[i].end(),greater<lon>());//for(int j=0;j<vct[i].size();++j)cout<<vct[i][j]<<" ";//cout<<vct[i].size()<<" "<<endl;for(lon j=0;j<rem;++j)maxk[i]+=vct[i][j];//cout<<maxk[i]<<endl; }memset(dp,0x3f,sizeof(dp));//for(lon i=0;i<=num;++i)dp[0][i][1]=0x3f3f3f3f,dp[0][i][0]=0x3f3f3f3f;dp[0][0][0]=0;for(lon i=1;i<=n;++i){for(lon j=0;j<=min(i,num);++j){if(j==0)dp[i][j][0]=0;else dp[i][j][0]=min(dp[i-1][j][0],dp[i-1][j-1][0]+sum[i]);dp[i][j][1]=min(dp[i-1][j][1],dp[i-1][j][0]+maxk[i]);dp[i][j][1]=min(dp[i][j][1],dp[i-1][j-1][1]+sum[i]);//cout<<i<<" "<<j<<" "<<dp[i][j][0]<<" "<<dp[i][j][1]<<" "<<maxk[i]<<endl; }}if(rem==0)cout<<dp[n][num][0]<<endl;else cout<<dp[n][num][1]<<endl;}return 0; }
转载于:https://www.cnblogs.com/gaudar/p/9782711.html
Wannafly挑战赛26 B 冥土追魂相关推荐
- Wannafly挑战赛26: B. 冥土追魂(思维题)
链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 题目描述 有一天 Misaka 和 Kuroko 在玩一个关于冥土追魂的游戏.... Misa ...
- Wannafly挑战赛26 B.冥土追魂 贪心
链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 题目描述 有一天 Misaka 和 Kuroko 在玩一个关于冥土追魂的游戏.... Misa ...
- nowcoder (牛客)Wannafly挑战赛26 B: 冥土追魂 (思维)
链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言104 ...
- Wannafly挑战赛26 B 冥土追魂(暴力)
题意:链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 有一天 Misaka 和 Kuroko 在玩一个关于冥土追魂的游戏.... Misaka ...
- Wannafly挑战赛26 B冥土追魂
链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他语言104 ...
- wannafly挑战赛26 B 冥土追魂 (思维+排序)
大致题意 有一天 Misaka 和 Kuroko 在玩一个关于冥土追魂的游戏- Misaka和Kuroko在一个 n x m 的棋盘上玩游戏,每个格子上都放着一些呱太.游戏共进行 k 回合,每一回合 ...
- Wannafly挑战赛26-B 冥土追魂
地址:https://www.nowcoder.com/acm/contest/212/B 思路:对于行列选取,是选择所有行中的最大值的最小值,当是并不能用贪心来做,例如 2 2 2 7 8 1 9 ...
- Wannafly挑战赛26:B冥土追魂(模拟?贪心?暴力?)
题目描述 有一天 Misaka 和 Kuroko 在玩一个关于冥土追魂的游戏.... Misaka和Kuroko在一个 n x m 的棋盘上玩游戏,每个格子上都放着一些呱太.游戏共进行 k 回合,每一 ...
- [贪心] 冥土追魂 Wannafly挑战赛26
链接:https://www.nowcoder.com/acm/contest/212/B 来源:牛客网 冥土追魂 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K,其他 ...
最新文章
- cocos2d-x 2.0启用HD高清图片支持
- 网络埋藏了怎样的物联网智慧?
- 数据流图中flow不显示文字_发动机系统数据流一般参数的解读
- Tomcat与Jre绿色环境配置(生产环境)
- vue/cli3 配置vux
- centos7 搭建keepalived+Nginx+tomcat
- Python使用XGBoost
- [BZOJ3297][USACO2011 Open]forgot
- Synonyms: 中文近义词工具包
- 填空什么的月牙_部编一年级上册语文第四单元知识梳理填空,附答案
- 各类软件激活码(更新中)
- TSW马宝国杯 web(我马宝国被黑了)
- python 微博自动点赞_用 Python 自动定时发微博
- 我的世界服务器怎么弄无限矿物,minecraft mod教程:在世界上生成矿石:GameRegistry的使用5...
- java多线程之线程安全----铁路售票系统的实现
- GWO灰狼优化算法综述(Grey Wolf Optimization)
- 如何ssh连接本地的虚拟机
- Android 跳转外部浏览器坑
- gta5oracle.yft原文件,GTA5林肯城市mod_侠盗猎车5 1991款林肯城市古典豪车MOD下载 - 游乐网...
- 支小蜜智慧食堂刷脸就餐让学生不再刷卡吃饭