POJ 1015 Jury Compromise (动态规划)
dp[i][j]代表选了i个人,D(J)-P(J)的值为j的状态下,D(J)+P(J)的最大和。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> using namespace std; const int MAXN = ; int n, m;
int dp[][MAXN];
int path[][MAXN];
int P[], D[];
int sub[], sum[];
int maxval, fix;
int ans[]; bool IfHave( int i, int j, int k )
{
while ( i > )
{
if ( path[i][j] == k ) return true;
j -= sub[ path[i][j] ];
--i;
}
return false;
} void DP()
{
memset( dp, -, sizeof(dp) );
dp[][+fix] = ;
for ( int i = ; i <= m; ++i )
for ( int j = -fix; j <= fix; ++j )
{
if ( dp[i - ][j + fix] >= )
{
for ( int k = ; k <= n; ++k )
{
int newdp = dp[i - ][ j+fix ]+sum[k];
int &curdp = dp[i][ j+fix+sub[k] ];
if ( !IfHave( i-, j+fix, k) && newdp > curdp )
{
path[i][j+fix+sub[k]] = k;
curdp = newdp;
}
}
}
} return;
} void getPath( int i, int j )
{
int cnt = ;
while ( i > )
{
ans[cnt++] = path[i][j];
j -= sub[ path[i][j] ];
--i;
}
return;
} int main()
{
int cas = ;
while ( scanf( "%d%d", &n, &m ) == && (n || m) )
{
for ( int i = ; i <= n; ++i )
{
scanf( "%d%d", &P[i], &D[i] );
sub[i] = P[i] - D[i];
sum[i] = P[i] + D[i];
} fix = * m;
maxval = * fix; DP(); int anssub, anssum;
for ( int i = ; i <= fix; ++i )
if ( dp[m][fix-i] >= || dp[m][fix+i] >= )
{
if ( dp[m][fix-i] > dp[m][fix+i] )
{
anssub = fix-i;
anssum = dp[m][fix-i];
}
else
{
anssub = fix+i;
anssum = dp[m][fix+i];
}
break;
} getPath( m, anssub );
int sum1 = , sum2 = ;
for ( int i = ; i < m; ++i )
{
sum1 += P[ ans[i] ];
sum2 += D[ ans[i] ];
}
printf( "Jury #%d\n", ++cas );
printf( "Best jury has value %d for prosecution and value %d for defence:\n", sum1, sum2 );
sort( ans, ans + m );
for ( int i = ; i < m; ++i )
printf( " %d", ans[i] );
puts("\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人的办法是:控方和辩方会根据对候 ...
随机推荐
- c/c++面试----c工程开发之头文件
多数c语言的初学者对c工程开发过程各个阶段的作用理解不到位,而这方面的的知识又是实际开发过程中经常用到的技能点,所以就成为面试考察中一个重要的考察方面.例如:头文件的作用.头文件的内容:链接的作用和意 ...
- FBI树
题目描述 我们可以把由"0"和"1"组成的字符串分为三类:全"0"串称为B串,全"1"串称为I串,既含"0&q ...
- C++创建一个名为Ellipse的椭圆类--练习
题目描述: /*设计名为Ellipse的椭圆类*/ /* 其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积,并测试该类. */ 代码如下: #include<iostream& ...
- 【2018 ICPC亚洲区域赛沈阳站 L】Tree(思维+dfs)
Problem Description Consider a un-rooted tree T which is not the biological significance of tree or ...
- 【模板】概率dp
有n个投资事件,和一个成功概率最低接受值rate.每个投资的价值是c[i],成功概率是p[i](浮点数). 在保证成功概率≥rate的情况下,使价值最大化. #include<bits/stdc ...
- ABAP术语-Business Framework
Business Framework 原文:http://www.cnblogs.com/qiangsheng/archive/2007/12/28/1017922.html Integrated, ...
- tidb损坏tikv节点怎么恢复集群
tikv节点宕机(机器再起不来),或者数据节点被rm -rf 掉了怎么办 正常情况下tikv节点down掉了.此时不要去执行store delete store_id .数据一般可以正常访问,但是如 ...
- jquer搜索
<body> <br/> <center> <tr><td>创建时间:</td><td><input type ...
- z-blog博客组插件openSug.js百度搜索下拉框提示代码
z-blog安装openSug插件即可获得带有“搜索框提示”功能的搜索框,让z-blog搜索更便捷! https://www.opensug.org/.../opensug_z-blog_v1.0 ...
- Ubuntu 配置多域名站点
思路 -- 跟Windows 一样 1添加Nginx 指向项目的入口 配置域名 2修改本地host文件域名指向 实现: 1 进入Nginx 配置文件 默认地址为 /etc/nginx/sites-e ...