Jury Compromise POJ - 1015 dp (标答有误)背包思想
题意:从 n个人里面找到m个人 每个人有两个值 d p 满足在abs(sum(d)-sum(p)) 最小的前提下sum(d)+sum(p)最大
思路:dp[i][j] i个人中 和是 j 运用背包的思想 二维背包 i是人数容量,人数要符合背包思想,每次只插入一个,逆序枚举
j是sum(d)+sum(p)
注意:这题的标准解法有误:https://blog.csdn.net/lyy289065406/article/details/6671105 这是有误的解法
错误由 POJ dicuss 提出:

也就是说 如果 存在和1 3 5 <2 4 6 但是差值相同 但是1 3 5 6是最大的 然而这时候 dp[3][j]的路径是2 4 6的路径 就不能再选出 6来更新1 3 5 所以就会有后效性 dp不成立
正解参考:https://blog.csdn.net/glqac/article/details/22687243
正解运用了背包的思想 进行二维化 第一维表示背包人数容量 第二维表示和 这样能不重不漏把所有情况都枚举了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=;
int dp[][maxn],sub[],Plus[];
vector<int>path[][maxn];
int main(){
int n,m,kase=;
while(scanf("%d%d",&n,&m)==){
if(n+m==)break;
for(int i=;i<m;i++){
for(int j=;j<maxn;j++){
path[i][j].clear();
}
}
memset(dp,-,sizeof(dp));
int a,b;
for(int i=;i<n;i++){
scanf("%d%d",&a,&b);
sub[i]=a-b;
Plus[i]=a+b;
}
int fix=*m;
dp[][fix]=;
for(int k=;k<n;k++){
for(int i=m-;i>=;i--){
for(int j=;j<fix*;j++){
if(dp[i][j]>=){
if(dp[i+][j+sub[k]]<dp[i][j]+Plus[k]){
dp[i+][j+sub[k]]=dp[i][j]+Plus[k];
path[i+][j+sub[k]]=path[i][j];
path[i+][j+sub[k]].push_back(k);
}
}
}
}
}
int i;
for( i=;dp[m][fix-i]==-&&dp[m][fix+i]==-;i++);
int temp=dp[m][fix+i]>dp[m][fix-i]?i:-i;
int sumD = ( dp[m][fix+temp] + temp )/;
int sumP = ( dp[m][fix+temp] - temp )/;
//辩方总值 = (辨控和+辨控差+修正值)/2
//控方总值 = (辨控和-辨控差+修正值)/2
printf( "Jury #%d\n", kase++ );
printf( "Best jury has value %d for prosecution and value %d for defence:\n", sumD,sumP);
for( i=; i < m; i++ )
printf( " %d", path[m][fix+temp][i]+);
printf("\n\n"); }
return ;
}
Jury Compromise POJ - 1015 dp (标答有误)背包思想的更多相关文章
- POJ 1015 Jury Compromise(双塔dp)
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33737 Accepted: 9109 ...
- POJ 1051 Jury Compromise ——(暴力DP)
题目不难,暴力地dp一下就好,但是不知道我WA在哪里了,对拍了好多的数据都没找出错误= =.估计又是哪里小细节写错了QAQ..思路是用dp[i][j]表示已经选了i个,差值为j的最大和.转移的话暴力枚 ...
- 背包系列练习及总结(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 ...
- POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目
http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...
- 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(背包+方案输出)
\(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...
- HDU 1015 Jury Compromise 01背包
题目链接: http://poj.org/problem?id=1015 Jury Compromise Time Limit: 1000MSMemory Limit: 65536K 问题描述 In ...
- 【题解】Jury Compromise(链表+DP)
[题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...
- POJ-1015 Jury Compromise(dp|01背包)
题目: In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting ...
随机推荐
- 个人实战演练全过程——No.1 最大连续子数组求和
之前的一次个人总结和一次单元测试入门学习是开启软件工程课程的前奏曲,也是热身,现在大家对于这门课程也有了初步的了解和认识,这次要开始真正的演奏了,要从头到尾完全靠自己的能力来解决一个问题,进行实战演练 ...
- SSH(poderosa)を使って、さくらのMySQLサーバーに接続する方法
SSH(poderosa)を使って.さくらのMySQLサーバーに接続する方法の覚書. 現在のさくらサーバーでは.新規ユーザーはTELNETが使えない.なので.データベースをコマンドラインで操作するには ...
- elasticsearch简单操作(一)
1.增加记录 例如1:向指定的 /Index/Type 发送 PUT 请求,就可以在 Index 里面新增一条记录.比如,向/accounts/person发送请求,就可以新增一条人员记录. curl ...
- Day5 Pyhton基础之编码与解码(四)
1.编码与解码 1.1现在常用的编码类型
- mysql 小数转换成百分数查出(保留两位小数百分数)
SELECT id as 'ID',GROUP_CONCAT(concat(truncate(royalties *100,2),'%')) as '比例' FROM yser FROM id in( ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
- 【转】redis-cluster安装配置
需要三台虚拟机(生产环境是3个物理机),分配静态IP.cluster中共6个节点.3主3从.本文中每个虚拟机上的redis端口:6379 6380. 需要注意的两点: 3个主节点分别位于3台虚拟机上, ...
- 【学习总结】GirlsInAI ML-diary day-2-Python版本选取与Anaconda中环境配置与下载
[学习总结]GirlsInAI ML-diary 总 原博github链接-day2 Python版本选取与Anaconda中环境配置与下载 1-查看当前Jupyter的Python版本 开始菜单选J ...
- 关于idea easyui 引入css js
1.引用官方网站 <link rel="stylesheet" type="text/css" href="http://www.w3cscho ...
- mapreduce join
MapReduce Join 对两份数据data1和data2进行关键词连接是一个很通用的问题,如果数据量比较小,可以在内存中完成连接. 如果数据量比较大,在内存进行连接操会发生OOM.mapredu ...