BZOJ1334Elect
2016-03-29 10:00
274 查看
1334: [Baltic2008]Elect
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 449 Solved: 246
Description
N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的.
Input
第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000
Output
你的组阁方案中最多能占多少个席位.
Sample Input
4
1 3 2 4
Sample Output
7
HINT
选择第二个政党和第四个
01背包。。
倒序排序然后背包
附上本蒟蒻的代码:
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 449 Solved: 246
Description
N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的.
Input
第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000
Output
你的组阁方案中最多能占多少个席位.
Sample Input
4
1 3 2 4
Sample Output
7
HINT
选择第二个政党和第四个
01背包。。
倒序排序然后背包
附上本蒟蒻的代码:
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int n,f[100001],w[301],v[301],sum=0,ans=0; int read() { int w=0,c=1; char ch=getchar(); while (ch<'0' || ch>'9') { if (ch=='-') c=-1; ch=getchar(); } while (ch>='0' && ch<='9') w=w*10+ch-'0',ch=getchar(); return w*c; } bool cmp(int x,int y) { return x>y; } int main() { int i,j; n=read(); for (i=1;i<=n;i++) v[i]=read(),sum+=v[i]; sort(v+1,v+n+1,cmp); f[0]=1; for (i=1;i<=n;i++) for (j=sum/2+v[i];j>=v[i];j--) if (f[j-v[i]]) { f[j]=1; ans=max(j,ans); } printf("%d",ans); return 0; }
相关文章推荐
- 投资者需要牢记的投资法则
- Hibernate properties详解
- 关于360笔试编程题的一些经验教训
- js中的dataset问题
- 一个进程在内存中的布局
- 字符串库函数总结
- java-poi处理excell
- Swift - 数字格式化转成字符串(保留两位小数,前面补0等)
- Android控件之ToggleButton
- 自动化测试关键字驱动的原理及实现
- 华为机试题ex002
- 使用fstream时,提示未定义的标识符
- 终于,零基础也能把App做的风生水起
- 两个主要问题将决定微信支付成败
- MongoDB执行计划分析详解
- 解决下拉刷新偏移
- POJ Area 1265(pick定理)
- 服务注册问题--未能加载文件和程序集
- unity3d 扩展unity原有的Inspector
- Android APP 开始的动画效果