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 (动态规划)的更多相关文章

  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. Ajax全接触(2)

    例子简介 1.查询员工信息,可以通过输入员工编号查询员工基本信息: 2.新建员工信息,包含员工姓名,员工编号,员工性别,员工职位: 实现: 1.纯html页面,用来实现员工查询和新建的页面: 2.ph ...

  2. Redis分布式锁的正确实现方式(Java版)

    前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介 ...

  3. 搭建Hadoop2.6.0+Eclipse开发调试环境

    上一篇在win7虚拟机下搭建了hadoop2.6.0伪分布式环境.为了开发调试方便,本文介绍在eclipse下搭建开发环境,连接和提交任务到hadoop集群. 1. 环境 Eclipse版本Luna ...

  4. vue入门: 实现选中并显示修改功能

    1.实现功能 2.工具 vue 3.代码 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  5. 快速解决Kali 更新失败问题

    Kali Linux 2018.4 初学者在安装完kali 系统后第一件事往往就是更新软件,但在更新过程中通常会出现各种各样的问题,比如更新提示不含有 'maincontrib' 组件,跳过配置文件 ...

  6. 设置Vim编辑器里Tab的长度,行号

    使用Vim编辑器写脚本时,经常会遇到多重循环语句,习惯上会用tab键来补齐.这时设置tab键占用的长度,可以调节界面的松紧度,使其达到令人满意的效果. 在针对个别用户和所有用户来设置时,与编辑SSH相 ...

  7. canvas画布——画八卦图

    实例 创建一个圆形: var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d") ...

  8. android Volley+Gson的使用

    听说Volley框架非常好用,今天试了一下post请求,果然如此,因为我传的是json获取的也是json所以就写了一种关于json的请求,其实其他的代码都差不多.首先要先创建一个全局的变量,请求入队列 ...

  9. Ajax之eval()函数

    Ajax之eval()函数 <!DOCTYPE html> <html> <head lang="en"> <meta charset=& ...

  10. 如何解决thinkphp5中验证码常见问题?

    对于thinkphp如何实现验证码,我这里就不介绍了.直接看之前的文章 http://www.cnblogs.com/qqblog/p/6639419.html.下面,我能想出来的是,我自己在开发过程 ...