感觉此题略难。。。。。。

背包问题。据说有一种二维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的更多相关文章

  1. 背包系列练习及总结(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 ...

  2. OpenJudge 2979 陪审团的人选 / Poj 1015 Jury Compromise

    1.链接地址: http://bailian.openjudge.cn/practice/2979 http://poj.org/problem?id=1015 2.题目: 总Time Limit: ...

  3. POJ 1015 Jury Compromise(双塔dp)

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33737   Accepted: 9109 ...

  4. poj 1015 Jury Compromise(背包+方案输出)

    \(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...

  5. POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目

    http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...

  6. POJ 1015 Jury Compromise dp分组

    第一次做dp分组的问题,百度的~~ http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑 ...

  7. [Poj 1015] Jury Compromise 解题报告 (完全背包)

    题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...

  8. 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 ...

  9. HDU POJ 1015 Jury Compromise(陪审团的人选,DP)

    题意: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候 ...

随机推荐

  1. TextUtils判断

    System.out.println(TextUtils.isEmpty(null)); System.out.println(TextUtils.isEmpty(""));

  2. Filter 解决web网页跳转乱码

    为什么采用filter实现了字符集的统一编码 问题: 为什么会有字符集编码的问题呢?对于Java Web应用,使用Tomcat容器获取和传递的参数(request.getParameter())默认是 ...

  3. Form表单的post 和get跳转区别

    post是隐示请求 ----- 安全 get显示请求不安全,会在URL上显示路径和参数

  4. 【语法】修饰符 static extern const

    转载自:http://my.oschina.net/u/2560887/blog/552683 一.C语言中的static的作用 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有 ...

  5. 在win7 64bit系统安装QC软件

    当本机系统不再QC软件支持的系统上,可以在setup右键选择兼容性选择能支持安装的系统, 在JBOSS页面,选择该服务器,用户名输入本机的用户名和密码,如果没有配置域输入计算机名. 如果没有装IIS, ...

  6. HDU 3594 Cactus (强连通分量 + 一个边只能在一个环里)

    题意:判断题目中给出的图是否符合两个条件.1 这图只有一个强连通分量 2 一条边只能出现在一个环里. 思路:条件1的满足只需要tarjan算法正常求强连通分量即可,关键是第二个条件,我们把对边的判断转 ...

  7. cocos2d-x 3.x 触摸事件

    HelloWorldScene.h bool touchBegan(cocos2d::Touch*touch, cocos2d::Event*event);//触摸开始,返回bool类型 void t ...

  8. Linux学习 -- 启动管理

    1 CentOS 6.x启动管理 系统运行级别 运行级别命令 #runlevel   查看级别 #init 运行级别  改变级别 系统默认运行级别 配置文件 /etc/inittab id:3:ini ...

  9. FOJ 2203 单纵大法好

    二分答案+验证 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm&g ...

  10. 2333: [SCOI2011]棘手的操作[写不出来]

    2333: [SCOI2011]棘手的操作 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1979  Solved: 772[Submit][Stat ...