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 ...
随机推荐
- Linux:一位猫奴的意外逆袭
作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...
- [书籍]重温《Framework Design Guidelines》
1. 前言 最近重温了<Framework Design Guidelines>. <Framework Design Guidelines>中文名称为<.NET设计规范 ...
- 《程序猿闭门造车》之NBPM工作流引擎 - 开篇
自己动手,丰衣足食,花了几个周末的休息时间,写了一个轻量级工作流引擎,一来学习技术,二来陶怡情操,暂且命名为NBPM,欢迎围观~~~ 主要功能有: 基于浏览器的在线流程及表单设计 提供流程及表单数据版 ...
- TRIO-basic指令--函数FUNCTION
TRIO-basic支持函数(强类型)编程,与PLC来相比较的话类似于定义的功能块可以重复调用,和C,C#......等一些高级的编程语言的函数类似.上一次的demo中决定尝试TRIO的函数来做一些例 ...
- 从HelloWorld开始学习.NET Core
1.首先创建一个项目文件夹,如E:\CoreProjects 使用cmd命令进入到新建的文件夹中 2.创建一个HelloWorld项目 命令:dotnet new console -o hellowo ...
- SQL Server(2000,2005,2008):恢复/回滚时间比预期长(译)
我已经讨论了各种确定恢复状态的方法,但是本周我参与了一个围绕回滚的有趣讨论.交易已经运行了14个小时,然后发出了KILL SPID.SPID进入回滚,并发生2天和4小时. 自然的问题是为什么不14小时 ...
- SDN 实验室学生们
SDN实验室系列:https://edu.cnblogs.com/campus/fzu/SdnLab --研究生及本科生们的博客及GitHub链接.欢迎各位大佬招募. 研究生 2018级 姓名 博客地 ...
- Vicious Keyboard CodeForces - 801A (暴力+模拟)
题目链接 题意: 给定一个字符串,最多更改一个字符,问最多可以有多少个“VK”子串? 思路: 由于数据量很小,不妨尝试暴力写.首先算出不更改任何字符的情况下有多个VK字串,然后尝试每一次更改一个位置的 ...
- NEST.net Client
NEST.net Client For Elasticsearch简单应用 由于最近的一个项目中的搜索部分要用到 Elasticsearch 来实现搜索功能,苦于英文差及该方面的系统性资料不好找,在实 ...
- mysql 无法退出sql命令行编辑
mysql 无法退出sql命令行编辑 | ANBOBhttp://www.anbob.com/archives/579.html mysql 无法退出sql命令行编辑 - 码农甲乙丙 - CSDN博客 ...