codeforces 228(div1) C
来源:互联网 发布:淘宝lol代练可靠吗 编辑:程序博客网 时间:2024/05/01 19:45
题意:
有几堆卡片 每堆卡片里面有多张 每张卡片上面有一个数字,两个人轮流拿,一个只能拿最上面那张,一个只能拿最下面那张。假设每个人都是最优的策略,求最后两人拿到的卡片上的数字和分别为多少。
思路:
对于每堆,拿最上面的人拿上半部分,拿最下面的人拿下半部分,如果该堆的卡片数是奇数,就把中间那张放在一边。偶数就是双方对半拿。最后将拿出来的奇数的中间那张卡片从大到小排个序,两个人按顺序来拿。最后将其求和就得到最终的解。
困惑:
不是很理解这个思路的原理,不懂为什么这就是最优的,感觉就是YY出来的。
代码:
#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int a[110][110];int b[110],c[110];int ans=0;int cmp(int i,int j){ return i>j;}main(){ int n; while(scanf("%d",&n)!=-1){ ans=0; int sum=0; memset(a,0,sizeof(a)); for (int i=0;i<n;i++){ scanf("%d",&b[i]); //sum+=b[i]; for (int j=1;j<=b[i];j++){ scanf("%d",&a[i][j]); if(j!=1) a[i][j]+=a[i][j-1]; } } int num=0; for(int i=0;i<n;i++){ if(b[i]%2){ ans+=a[i][b[i]/2]; c[num++]=a[i][b[i]/2+1]-a[i][b[i]/2]; } else{ ans+=a[i][b[i]/2]; } sum+=a[i][b[i]]; } sort(c,c+num,cmp); for(int i=0;i<num;i+=2){ ans+=c[i]; } printf("%d %d\n",ans,sum-ans); }}
本来想好这个寒假开始练习算法,结果回来这才是第三道 sigh~
0 0
- codeforces 228(div1) C
- codeforces-div1-282-C
- Codeforces #228 div1
- codeforces 228(div1) B
- codeforces 278Div1 C题
- 【codeforces #310】div1 A -- C
- codeforces 319C div1 189
- Codeforces Round #228 div1前三题
- Codeforces Round #125 div1 C Delivering Carcinogen
- Codeforces 200 div1 C. Read Time
- Codeforces Round #253 DIV1 C 贪心
- CodeForces #318 (div1) C.Bear and Drawing
- codeforces round# 302 (div1 C) (状压dp)
- codeforces round# 320 div1(C 思路三分)
- Codeforces 424 div1 C. Bamboo Partition 830C 分块优化
- [杂题] Codeforces 830C Round #424 Div1 C. Bamboo Partition
- Codeforces 274 DIV1 C - Riding in a Lift 动态规划
- codeforces/#305 Div1/547/C Mike and Foam 【容斥】
- 关于wndlpszClassName的一个小问题(新手)
- inotify -- Linux 2.6 内核中的文件系统变化通知机制
- listview条目上有checkbox抢焦点的处理办法
- 为笔记本设置WIFI的命令
- UVa 10891 Game of Sum (区间DP&博弈)
- codeforces 228(div1) C
- PHP多功能图片处理类
- 原来新浪的blog的地址
- PHP文件缓存的性能测试
- 黑马程序员_Java基础_网络编程
- Android的跨进程通信
- 数据结构基础(一)
- 数据结构基础(二)
- 再牛逼的算法也算不出女神的忧伤……