Baltic2008联合内阁

Description

N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的.

Input

第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000

Output

你的组阁方案中最多能占多少个席位.

Algorithm

这道题的意思讲得不明朗啊。大概意思是从若干个数中挑选出几个数,使这些被选出的数之和大于总和的一半,并且满足:被选出的数之和减去这些数中的最小数,得到的值小于总和的一半。然后用f[j]表示当前能不能使得数之和达到j,枚举i个数,若f[j]==true且j<=总数一半,就把j+a[i]标成true。

这里还有一个细节,被选出的数之和减去这些数中的最小数,得到的值小于总和的一半。我们可以先将政党的人数先由大到小排序,我们由大到小枚举,这样就可以保证当前取的一定是所有已取得政党中的最小值。

Code

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[100100],n,ans,sum;
 6 bool f[100100];
 7 int main()
 8 {
 9   cin>>n;
10   ans=0;
11   for (int i=1;i<=n;i++)
12   {
13     cin>>a[i];
14     sum+=a[i];
15   }
16   sort(a+1,a+n+1);
17   f[0]=true;
18   for (int i=n;i>=1;i--)
19     for (int j=sum/2;j>=0;j--)
20       if (f[j])
21       {
22         f[j+a[i]]=true;
23         if (j+a[i]>ans) ans=j+a[i];
24       }
25   cout<<ans<<endl;
26   return 0;
27 }

Source

http://www.lydsy.com/JudgeOnline/problem.php?id=1334

时间: 2024-08-05 19:13:10

Baltic2008联合内阁的相关文章

BZOJ_1334_[Baltic2008]Elect_DP+语文题

BZOJ_1334_[Baltic2008]Elect_DP Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于 总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总 数的一半,则这个政党被称为是多余的,这是不允许的. Input 第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000 Output 你的组阁方案中最多能占多少

【bzoj1334】[Baltic2008]Elect

题目描述 N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的. 输入 第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000 输出 你的组阁方案中最多能占多少个席位. 样例输入 4 1 3 2 4 样例输出 7 题解 从大到小排序,然后01背包.注意状

8.2/baltic神(水)题

bzoj1334: Description N个政党要组成一个联合内阁,每个党都有自己的席位数. 现在希望你找出一种方案,你选中的党的席位数要大于总数的一半,并且联合内阁的席位数越多越好. 对于一个联合内阁,如果某个政党退出后,其它党的席位仍大于总数的一半,则这个政党被称为是多余的,这是不允许的. Input 第一行给出有多少个政党.其值小于等于300 下面给出每个政党的席位数.总席位数小于等于 100000 Output 你的组阁方案中最多能占多少个席位. 背包dp.一开始想着贪心贪心...后

Intel DCM 携手DELL共同推出关于DCIM的联合调研

杰夫克劳斯 英特尔数据中心解决方案总经理 最近由英特尔数据中心管理解决方案DCM和戴尔共同进行的一项调查显示,几乎有一半的IT管理人员并不完全了解他们的数据中心正在发生的变化.数据中心基础设施管理(DCIM)解决方案是了解数据中心如何高效运行的关键,但仅有53%的IT管理者正在使用这种方法.DCIM解决方案可以提供数据中心内部关于热量和能耗使用情况的重要信息,并可以利用这些信息提供可行方案进一步节省数据中心的运营成本. 下面的资讯图表对本次联合调查进行了概括,阐述了与DCIM相关的最佳实践,包括

[NOIP2014]联合权值

描述 无向连通图G有n个点,n-1条边.点从1到n依次编号,编号为i的点的权值为Wi  ,每条边的长度均为1.图上两点(u, v)的距离定义为u点到v点的最短距离.对于图G上的点对(u, v),若它们的距离为2,则它们之间会产生Wu×Wv的联合权值. 请问图G上所有可产生联合权值的有序点对中,联合权值最大的是多少?所有联合权值之和是多少? 输入格式 输入文件名为link.in. 第一行包含1个整数n. 接下来n-1行,每行包含2个用空格隔开的正整数u.v,表示编号为u和编号为v的点之间有边相连.

结合mysql查询优化器对联合索引的探讨

无陈述,直接开讲: babysitter_account表中的联合索引如下(开发小伙伴们自建的联合索引.您发现不妥了吗?): KEY `flag` (`flag`,`user_id`,`account_id`) 过去认为: 1.SELECT account_id,weibo_id,weibo_type FROM babysitter_account WHERE user_id BETWEEN 100 and 10000 AND flag=0; 2.SELECT account_id,weibo_

融云联合ofo给大家送福利!

亲爱的老铁们,融云联合ofo给大家送福利了.即时起至9月15日,只要关注融云微信服务号"融云即时通讯云",即可免费领取两张ofo畅骑月卡(60天). 大家会在融云服务号里看到:技术干货.产品动态.案例分析.行业资讯.融云新闻等内容:服务号还会不定期为开发者们发放优惠券,开展线上活动,福利多多,欢迎关注.

数据库之联合查询和连接查询

http://blog.csdn.net/memgxingfeixiang/article/details/52765208 1.JOIN和UNION区别join 是两张表做交连后里面条件相同的部分记录产生一个记录集,union是产生的两个记录集(字段要一样的)并在一起,成为一个新的记录集. JOIN用于按照ON条件联接两个表,主要有四种:INNER JOIN:内部联接两个表中的记录,仅当至少有一个同属于两表的行符合联接条件时,内联接才返回行.我理解的是只要记录不符合ON条件,就不会显示在结果集

美丽联合业务升级下的机器学习应用

通常机器学习在电商领域有三大应用,推荐.搜索.广告,这次我们聊聊三个领域里都会涉及到的商品排序问题.从业务角度,一般是在一个召回的商品集合里,通过对商品排序,追求GMV或者点击量最大化.进一步讲,就是基于一个目标,如何让流量的利用效率最高.很自然的,如果我们可以准确预估每个商品的GMV转化率或者点击率,就可以最大化利用流量,从而收益最大. 蘑菇街是一个年轻女性垂直电商平台,主要从事服饰鞋包类目,2015年时全年GMV超过了百亿,后与美丽说合并后公司更名为美丽联合集团.2014年时入职蘑菇街,那时