POJ 1015 Jury Compromise
感觉此题略难。。。。。。
背包问题。据说有一种二维DP的写法是错的。亲测,背包做法无误。
dp[i][j][k]表示前i个物品,选择j个,差值为k的情况下获得的最大总和
dp[i][j][k]=max(dp[i-1][j][k],dp[i-1][j-1][k-差]+和) 即第i个物品用或者不用。
DP完成之后,在表中寻找一下最优解即可。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std; struct Path
{
// int a,b,c;
int w;
} path[+][+][+];
int dp[+][+][+];
int p[+],d[+];
int n,m;
stack<int>S;
int Z=; int main()
{
int Case=;
while(~scanf("%d%d",&n,&m))
{
if(!n&&!m) break; for(int i=; i<=n; i++) scanf("%d%d",&p[i],&d[i]);
memset(dp,-,sizeof dp);
dp[][][Z]=; for(int i=; i<=n; i++)
for(int j=; j<=m; j++)
for(int k=; k<=*Z; k++)
path[i][j][k].w=-; for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
{
for(int k=Z*; k-(p[i]-d[i])>=; k--)
{
if(dp[i-][j][k]!=-)
{
dp[i][j][k]=dp[i-][j][k];
path[i][j][k].w=;
} if(j>=&&dp[i-][j-][k-(p[i]-d[i])]!=-)
{
if(dp[i-][j-][k-(p[i]-d[i])]+p[i]+d[i]>dp[i][j][k])
{
dp[i][j][k]=dp[i-][j-][k-(p[i]-d[i])]+p[i]+d[i];
path[i][j][k].w=;
}
}
}
}
} int posa,posb,posc;
int Max=-;
for(int i=; i<=Z; i++)
{
for(int j=; j<=n; j++)
if(dp[j][m][Z+i]>Max&&path[j][m][Z+i].w==)
Max=dp[j][m][Z+i],posa=j,posb=m,posc=Z+i;
for(int j=; j<=n; j++)
if(dp[j][m][Z-i]>Max&&path[j][m][Z-i].w==)
Max=dp[j][m][Z-i],posa=j,posb=m,posc=Z-i;
if(Max!=-) break;
} while(!S.empty()) S.pop(); int ans1,ans2;
ans1=(posc-Z+dp[posa][posb][posc])/;
ans2=ans1-(posc-Z); while()
{
if(path[posa][posb][posc].w==-) break;
if(path[posa][posb][posc].w!=-)
{
int Newa,Newb,Newc;
if(path[posa][posb][posc].w==)
{
S.push(posa);
Newa=posa-;
Newb=posb-;
Newc=posc-(p[posa]-d[posa]);
}
else
{
Newa=posa-;
Newb=posb;
Newc=posc;
}
posa=Newa;
posb=Newb;
posc=Newc;
}
} printf("Jury #%d\n",Case++);
printf("Best jury has value %d for prosecution and value %d for defence:\n",ans1,ans2);
while(!S.empty())
{
printf(" %d",S.top());
S.pop();
}
printf("\n\n"); }
return ;
}
POJ 1015 Jury Compromise的更多相关文章
- 背包系列练习及总结(hud 2602 && hdu 2844 Coins && hdu 2159 && poj 1170 Shopping Offers && hdu 3092 Least common multiple && poj 1015 Jury Compromise)
作为一个oier,以及大学acm党背包是必不可少的一部分.好久没做背包类动规了.久违地练习下-.- dd__engi的背包九讲:http://love-oriented.com/pack/ 鸣谢htt ...
- OpenJudge 2979 陪审团的人选 / Poj 1015 Jury Compromise
1.链接地址: http://bailian.openjudge.cn/practice/2979 http://poj.org/problem?id=1015 2.题目: 总Time Limit: ...
- POJ 1015 Jury Compromise(双塔dp)
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33737 Accepted: 9109 ...
- poj 1015 Jury Compromise(背包+方案输出)
\(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...
- POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目
http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...
- POJ 1015 Jury Compromise dp分组
第一次做dp分组的问题,百度的~~ http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑 ...
- [Poj 1015] Jury Compromise 解题报告 (完全背包)
题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...
- POJ #1015 - Jury Compromise - TODO: POJ website issue
(poj.org issue. Not submitted yet) This is a 2D DP problem, very classic too. Since I'm just learnin ...
- HDU POJ 1015 Jury Compromise(陪审团的人选,DP)
题意: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候 ...
随机推荐
- redhat 安装GCC-4.8.3
1.下载gcc-4.8.3安装包 gcc各版本浏览地址:http://ftp.gnu.org/gnu/gcc/ yum install gccyum install gcc-c++ 2.将gcc-4. ...
- 【转】Xshell 十个技巧
原文:http://www.cnblogs.com/wanhl/archive/2012/10/17/2727607.html 一.帐号密码保存.可以保存多个vps登陆信息,免去每次输入的烦恼. 二. ...
- WPF中静态引用资源与动态引用资源的区别
WPF中静态引用资源与动态引用资源的区别 WPF中引用资源分为静态引用与动态引用,两者的区别在哪里呢?我们通过一个小的例子来理解. 点击“Update”按钮,第2个按钮的文字会变成“更上一层楼”, ...
- Day02——widow对象
window - 计时器 1、setTimeout()可以用来在指定的时间之后单次调用函数. setTimeount(f,1000);//一秒后调用函数f clearTimeout();取消函数的执行 ...
- 转载:数位DP模板
// pos = 当前处理的位置(一般从高位到低位) 2 // pre = 上一个位的数字(更高的那一位) 3 // status = 要达到的状态,如果为1则可以认为找到了答案,到时候用来返回, 4 ...
- FZU Problem 1895 整除45问题(整除问题+字符串维护+优化)
这个题有点烧脑啊,但是只要想清楚被45整除的数,肯定能被5和9整除,能被9整除的数各位加起来肯定是9的倍数,能被5整除的末尾是0或5. 然后dfs的过程稍微不太好懂,还有几个优化必须要注意.dfs的过 ...
- Issue 5158: Modal dialog present (UnexpectedAlertOpen) issue in IE (Similar issue like 3360)
https://code.google.com/p/selenium/issues/detail?id=5158 Reported by mailtopa...@gmail.com, Feb 13 ...
- hdu_2159_FATE(完全背包)
题目连接:hdu_2159_FATE 题意:完全背包的题意 题解:把杀敌数看成背包的容量,维护一个经验的最大值,我是多开一维来记录最大的忍耐度,当然你也可以直接开一位,并记录忍耐度,最后扫一遍 #in ...
- JAVA项目复习的一些小细节
使用javadoc完成自动文档,这一段将在后期进行介绍. 类,方法和变量的作用域. 使用修饰符public和修饰符private,对于类和方法来说并没有什么不妥的,但是变量使用public却在某些时刻 ...
- 设计模式---Manager(管理器)
设计模式之美:Manager(管理器) 索引 意图 结构 参与者 适用性 效果 实现 实现方式(一):Manager 模式的示例实现. 意图 将对一个类的所有对象的管理封装到一个单独的管理器类中. 这 ...