BZOJ1334 [Baltic2008]Elect

直接DP一下就好了嘛、、、

首先对人数从大到小排序,然后f[i]表示的是人数为i的政党联盟能否成立

f[i] 由 f[i - a[now]]转移过来,同时保证i - a[now] <= sum即可

 1 /**************************************************************
 2     Problem: 1334
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:156 ms
 7     Memory:1196 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <algorithm>
12
13 using namespace std;
14
15 int n, sum, ans;
16 int a[305];
17 int f[100005];
18
19 int main() {
20     int i, j;
21     scanf("%d", &n);
22     for (i = 1; i <= n; ++i)
23         scanf("%d", a + i), sum += a[i];
24     sort(a + 1, a + n + 1);
25     f[0] = 1;
26     for (i = n; i; --i)
27         for (j = sum / 2 + a[i]; j >= a[i]; --j)
28             if (f[j - a[i]])
29                 f[j] = 1, ans = max(j, ans);
30     printf("%d\n", ans);
31     return 0;
32 }

时间: 2024-10-11 12:53:37

BZOJ1334 [Baltic2008]Elect的相关文章

【贪心+背包】BZOJ1334 [Baltic2008]Elect

Description 从N个数中选出任意个数且和尽量大,但要满足去掉任意一个和就小于总和的一半.n<=300, ai<=1e5. Solution 这个条件其实就是 去掉选出的最小的一个和就小于一半 所以从大到小背包 Code 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 using namespace std; 5 const int maxn=1e5+5; 6 7 int

【bzoj1334】[Baltic2008]Elect

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

题目清单(更新至2016年12月17日 10:52)

若无特殊说明,默认为大视野题目 [二分答案] 2196: [Usaco2011 Mar]Brownie Slicing 1082: [SCOI2005]栅栏 3969: [WF2013]Low Power 1650: [Usaco2006 Dec]River Hopscotch 跳石子 1639: [Usaco2007 Mar]Monthly Expense 月度开支 2600: [Ioi2011]ricehub [背包类DP] 1625: [Usaco2007 Dec]宝石手镯 1531: [

1339 / 1163: [Baltic2008]Mafia

1163: [Baltic2008]Mafia Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 96  Solved: 60[Submit][Status][Discuss] Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点 Input 第一行输入N,M代表车站的总个数,及有多少条双向

1163: [Baltic2008]Mafia

1163: [Baltic2008]Mafia Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 123  Solved: 70[Submit][Status][Discuss] Description 匪徒准备从一个车站转移毒品到另一个车站,警方准备进行布控. 对于每个车站进行布控都需要一定的代价,现在警方希望使用最小的代价控制一些车站,使得去掉这些车站后,匪徒无法从原定的初始点到达目标点 Input 第一行输入N,M代表车站的总个数,及有多少条双

elect美化自定义下拉框样式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>张力仪</title></he

BZOJ_1334_[Baltic2008]Elect_DP+语文题

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

BZOJ1166 : [Baltic2008]Magical Stones

考虑二分答案,转化为求有多少$\leq lim$的数满足条件. 从两侧往中间进行数位DP,设$f[l][r][j][x][y][z][pre][suf]$表示当前准备填的两个位置是$l$和$r$,已经有$j$对相邻的数不同,$l-1$填的是$x$,$r+1$填的是$y$,正序串和逆序串的大小关系为$z$,正序串和$lim$的大小关系为$pre$,逆序串和$lim$的大小关系为$suf$的方案数. 注意到$r=n-l+1$,因此可以省去$r$这一维,然后枚举接下来填什么数进行转移即可. 时间复杂度

Baltic2008联合内阁

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