Lightoj 1147【DP】
题意:
把n个人分成两部分,要你怎么分使得两部分尽可能相等;
思路:
如果我们把一部分人的重量达到离sum/2最近,那就一定行啊
其实就是一条棒,两种不同的棒去拼接成一条棒,然后最好就是离mid最近,一定会得到这个值啊。
然后搞出这个值,mid-x就是他们的最小差值。不就是一个0/1背包取或不取。
然后wa了,人数相差不超过1个///
后来肯定要维护人数啊,纯粹的+,dp[j]=dp[j-a[i]]+1;这样不行啊,可能这个 j 是由多种组合过来的,
我们还是维护一半人数,最多50,所以我们可以状压,然后表示状态,比如dp[100]=6(110) 就意味着是可以4个人组合,或者2个人组合;
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int>PII;
const double eps=1e-5;
const double pi=acos(-1.0);
const int INF=0x3f3f3f3f;
LL dp[100100];
int a[110];
int n; int main()
{
int T,cas=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int sum,w,x;
memset(dp,0,sizeof(dp));
sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
w=sum/2;
dp[0]=1;
for(int i=1;i<=n;i++)
for(int j=w;j>=a[i];j--)
dp[j]|=(dp[j-a[i]]*2LL);
for(int i=w;i>=0;i--)
{
if(dp[i]&(1LL<<((n+1)/2))||dp[i]&(1LL<<(n/2)))
{
x=i;
break;
}
}
printf("Case %d: %d %d\n",cas++,x,sum-x);
}
return 0;
}
Lightoj 1147【DP】的更多相关文章
- Kattis - honey【DP】
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 ...
- HDOJ 1423 Greatest Common Increasing Subsequence 【DP】【最长公共上升子序列】
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Othe ...
- HDOJ 1501 Zipper 【DP】【DFS+剪枝】
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- HDOJ 1257 最少拦截系统 【DP】
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDOJ 1159 Common Subsequence【DP】
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- HDOJ_1087_Super Jumping! Jumping! Jumping! 【DP】
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- POJ_2533 Longest Ordered Subsequence【DP】【最长上升子序列】
POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Mem ...
- HackerRank - common-child【DP】
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream&g ...
- LeetCode:零钱兑换【322】【DP】
LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成 ...
随机推荐
- ubuntu安装rpm格式文件方法(转载)
red hat 系统用rpm格式的文件安装软件 Debian系列用deb格式的文件安装软件 ubuntu安装软件是用deb格式的文件安装,ubuntu对于rpm格式的文件安装软件是: 先将rmp格 ...
- 【转】IDA远程调试 The debugger could not attach to the selected process. irs_recv 等待的操作过时
IDA连接android_server 选中进程点ok之后 连接不上报错 The debugger could not attach to the selected process. This can ...
- (t,p,o) t:p>=o there cannot be more consumer instances in a consumer group than partitions
https://kafka.apache.org/intro.html Kafka as a Messaging System How does Kafka's notion of streams c ...
- git文章列表
关于gitlab默认clone协议 Git实现从本地加入项目到远程仓库 翻翻git之---一个简单的标签控件 LabelView (随手发了两张小宝宝的玩耍照) id=1125" targe ...
- ubuntu搜狗拼音安装
1.官方下载deb 2.双击安装 3.终端im-config,选择fcitx 4.重启 5.输入法设置中add一下sougoupinyin
- CALayer的隐式动画
CALayer的使用 在我的理解中CALayer就是iOS中利用图层精简非交互式绘图.那么那些核心动画类.也就是变化图层的非交互式绘制规则而已.其中的本质就是将CALayer中的内容转化为map图.从 ...
- android——实现多语言支持
我们知道,建好一个android 的项目后,默认的res下面 有layout.values.drawable等目录.这些都是程序默认的资源文件目录,如果要实现多语言版本的话,我们就要添加要实现语言的对 ...
- bzoj4670: 佛罗里达
这题直接随机化+贪心就可以爆踩过去,我加了个退火增加容错率而已....其实你随机的次数够多根本不需要... 然后来自肉丝哥哥的正经做法: 先钦定D(A)>D(B),那么可以枚举D(A),然后再去 ...
- C语言中的排序算法--冒泡排序,选择排序,希尔排序
冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没 ...
- top命令按内存和cpu排序
目录 按进程的CPU使用率排序 按进程的内存使用率排序 按进程的CPU使用率排序 运行top命令后,键入大写P. 有两种途径: a) 打开大写键盘的情况下,直接按P键 b) 未打开大写键盘的情况下,S ...