【bzoj1334】[Baltic2008]Elect
来源:互联网 发布:java 设置时区 编辑:程序博客网 时间:2024/06/12 00:00
Description
N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的.
Input
第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000
Output
你的组阁方案中最多能占多少个席位.
Sample Input
4
1 3 2 4
Sample Output
7
HINT
选择第二个政党和第四个
题解
从大到小排序,然后背包,因为这样满足了拿走当前的,可以保证剩下的一定不会超过总数的一半
代码
#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#define mod 1000000007#define N 10005#define M 50005typedef long long ll;using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}int n,sum,a[305],f[100005];int main(){ n=read(); for (int i=1;i<=n;i++) a[i]=read(),sum+=a[i]; sum/=2; sort(a+1,a+n+1,greater<int>()); f[0]=1; for (int i=1;i<=n;i++) for (int j=sum+a[i];j>=a[i];j--) f[j]|=f[j-a[i]]; for (int i=sum+a[1];i>=0;i--) if (f[i]) return printf("%d",i),0; }
阅读全文
0 0
- BZOJ1334 [Baltic2008]Elect
- 【bzoj1334】[Baltic2008]Elect
- 【BZOJ1334】【Baltic2008】Elect
- bzoj1334[Baltic2008]Elect 背包dp
- bzoj1334 [Baltic2008]Elect(贪心+背包dp)
- 1334: [Baltic2008]Elect
- BZOJ 1334: [Baltic2008]Elect dp
- 【BZOJ】【P1334】【Baltic2008】【Elect】【题解】【DP】
- ELECT 示例
- Leader elect
- BZOJ 1164 Baltic2008 Game
- bzoj 1168 [Baltic2008]Gloves
- 【Baltic2008】黑手党 网络流
- BZOJ1168 [Baltic2008]Gloves
- bzoj1339: [Baltic2008]Mafia
- 1167: [Baltic2008]Elections
- BZOJ1163: [Baltic2008]Mafia
- 【Baltic2008】黑手党(Mafia)(BSOI2891)
- C
- 更改Tomcat日志路径
- 2017全国大学生信安赛 easyheap
- 影响关键词排名稳定的因素有哪些?
- 前端基础学习之CSS样式
- 【bzoj1334】[Baltic2008]Elect
- OpenWrt移植Apache2 apr 到MT7620N
- 【ETL】拉链表算法
- mysql binlog日志及mysqlbinlog操作详解
- 三栏布局
- 为什么有时候使用迭代函数得到的都是undefined
- ExtJs 常用方法(alert confirm prompt show wait)
- 数据挖掘(1):关联规则挖掘基本概念与Aprior算法
- RPM包的安装命令