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人的办法是:控方和辩方会根据对候 ...
随机推荐
- 用GDB调试程序的设置 Segmentation fault(Core Dump)调试
在写wifi库的时候碰见一个 Segmentation fault(Core Dump) 所以需要用GDB调试下. 在cmake的时候,修改CMakeLists.txt set(CMAKE_C_FLA ...
- mvc动态生成a标签,多个属性,多个querystring
1*服务端 客户端 跳转的url 2*服务端 客户端 跳转的url 3*服务端 客户端 跳转的url 4*服务端 客户端 跳转的url
- C#获取本机局域网ip和公网ip
1.获取局域网ip IPAddress ipAddr = Dns.Resolve(Dns.GetHostName()).AddressList[0];//获得当前IP地址 string ip=ipAd ...
- ANT 操控 ORACLE数据库实践
Ant 执行系统命令没有任何问题,这次实际系统命令中可以说遇到了两个问题,一个是启动服务的命令是含有空格的,第二个如何备份数据库可以自动加上日期. 首先,我们启动oracle数据库,操作有两个: 1. ...
- runtime关联属性示例
前言 在开发中经常需要给已有的类添加方法和属性,但是Objective-C是不允许给已有类通过分类添加属性的,因为类分类是不会自动生成成员变量的.但是,我们可以通过运行时机制就可以做到了. 本篇文章适 ...
- linux的学习系列 5--环境变量
在Linux中,环境变量是一个很重要的概念.环境变量可以由系统.用户.Shell以及其他程序来设定. 变量就是一个可以被赋值的字符串,赋值范围包括数字.文本.文件名.设备以及其他类型的数据. 下面的例 ...
- svn 设置文件可执行权限
本地文件在commit到仓库之前若没有chmod +x 权限的话,那在svn仓库里的文件将会保持当前无可执行属性状态. 即使在本地chmod +x filename 之后,再提交到仓库也是没有用的.c ...
- html5 localStorage和sessionStorage
该随便来自: http://www.cnblogs.com/yuzhongwusan/archive/2011/12/19/2293347.html html5中的Web Storage包括了两种存储 ...
- UVALive 2147 Push!!(队列实现DP)
就我的理解来说这个题,本质上是一个DP题,不应该说是搜索,因为我的做法是把表格中所有的数据都找到,使用队列暴力来遍历出所有状态,因为题目中的数据范围小,所有耗时也小. 首先分析箱子是一个被动物体,人是 ...
- HDU 1686 Oulipo(KMP+计算匹配成功次数)
一开始总是超时,后来发现还是方法没找对,这个跟普通KMP不太一样的就是,KMP匹配成功的时候会完全跳过已经匹配成功的匹配段,至少我掌握的是.那么如何避免这样的问题呢,举个栗子啊 原串为ABABA,模式 ...