题目不难,暴力地dp一下就好,但是不知道我WA在哪里了,对拍了好多的数据都没找出错误= =。估计又是哪里小细节写错了QAQ。。思路是用dp[i][j]表示已经选了i个,差值为j的最大和。转移的话暴力枚举当前选那个即可。代码如下(WA的,以后有机会再找找错在哪里吧0.0):

  1. #include <stdio.h>
  2. #include <algorithm>
  3. #include <string.h>
  4. #include <set>
  5. using namespace std;
  6. const int N = + ;
  7.  
  8. int n,m;
  9. int a[N],b[N];
  10. struct node
  11. {
  12. int now,pre,val;
  13. int a,b;
  14. }dp[+][+];
  15.  
  16. set<int> get(int x)
  17. {
  18. set<int> S;
  19. for(int i=m;i>=;i--)
  20. {
  21. S.insert(dp[i][x].now);
  22. x = dp[i][x].pre;
  23. }
  24. return S;
  25. }
  26.  
  27. int main()
  28. {
  29. int kase = ;
  30. while(scanf("%d%d",&n,&m) == )
  31. {
  32. if(n == & m == ) break;
  33. for(int i=;i<=n;i++) scanf("%d%d",a+i,b+i);
  34. for(int i=;i<=;i++) dp[][i] = (node){-,-,,,};
  35. dp[][] = (node){,-,,,};
  36. for(int i=;i<=m;i++)
  37. {
  38. for(int j=;j<=;j++)
  39. {
  40. dp[i][j] = (node){-,-,,,};
  41. for(int k=;k<=n;k++)
  42. {
  43. int add = a[k] - b[k];
  44. if(j-add < || j - add > ) continue;
  45. int pre = j - add;
  46. if(dp[i-][pre].now == -) continue;
  47. int flag = ;
  48. for(int p=i-;p>=;p--)
  49. {
  50. if(dp[p][pre].now == k)
  51. {
  52. flag = ;
  53. break;
  54. }
  55. else pre = dp[p][pre].pre;
  56. }
  57. if(flag == ) continue;
  58. if(dp[i-][j - add].val + a[k]+b[k] > dp[i][j].val)
  59. {
  60. dp[i][j] = (node){k,j-add,dp[i-][j - add].val + a[k]+b[k],
  61. dp[i-][j - add].a + a[k], dp[i-][j - add].b + b[k]};
  62. }
  63. }
  64. }
  65. }
  66. set<int> S;
  67. int aa, bb;
  68. for(int add=;add<=;add++)
  69. {
  70. if(dp[m][-add].now == - && dp[m][+add].now == -) continue;
  71. int temp = ;
  72. if(dp[m][-add].now != -)
  73. {
  74. temp = dp[m][-add].val;
  75. S = get(-add);
  76. aa = dp[m][-add].a, bb = dp[m][-add].b;
  77. }
  78. if(dp[m][+add].now != -)
  79. {
  80. if(dp[m][+add].val > temp)
  81. {
  82. S = get(+add);
  83. aa = dp[m][+add].a, bb = dp[m][+add].b;
  84. }
  85. }
  86. break;
  87. }
  88. printf("Jury #%d\n",kase++);
  89. printf("Best jury has value %d for prosecution and value %d for defence:\n",aa,bb);
  90. for(set<int>::iterator it=S.begin();it!=S.end();it++) printf(" %d",*it);
  91. puts("\n");
  92. }
  93. return ;
  94. }

POJ 1051 Jury Compromise ——(暴力DP)的更多相关文章

  1. POJ 1015 Jury Compromise(dp坑)

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

  2. POJ 1015 Jury Compromise【DP】

    罗大神说这题很简单,,,,然而我着实写的很难过... 题目链接: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110495#proble ...

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

  4. 【题解】Jury Compromise(链表+DP)

    [题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...

  5. POJ 1015 Jury Compromise(双塔dp)

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

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

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

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

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

  8. POJ 1015 Jury Compromise dp分组

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

  9. poj 1015 Jury Compromise(背包变形dp)

    In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting of ...

随机推荐

  1. Java AmericanFlagSort

    Java AmericanFlagSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInterna ...

  2. 奇妙的算法【4】-汉诺塔&哈夫曼编码

    1,汉诺塔问题[还是看了源码才记起来的,记忆逐渐清晰] 汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着6 ...

  3. metronic-v4.6 使用经验

    1.弹框居中显示 上下居中 需要上下居中引用  bootstrap-modalmanager.js 左右居中 修改 bootstrap-modal.js 中 this.$element.css('ma ...

  4. 3.Redis数据类型

    Redis的五大数据类型: 1.string(字符串) string是redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value. string类型是二进制安 ...

  5. 1.NoSQL入门和概述

    入门概述: 1.为什么要用到NoSQL a)  单机MySQL的美好年代,在90年代,一个网站的访问量一般都不大,用单个数据库完全可以轻松应付.在那个时候,更多的都是静态网页,动态交互类型的网站不多. ...

  6. 【2017-12-06】winfrom 窗体自启最大化,控件自适应

    先将窗体windowstate属性设置为Maximized public partial class Form1 : Form { public Form1() { InitializeCompone ...

  7. sql server 某一列求和

    sql server 某一列求和 SELECT 患者来源,设备类型,检查部位,设备名称,convert(char(10),STUDY_DATE,121) as 日期, count(distinct 就 ...

  8. springboot集成Apollo分布式配置

    安装Apollo服务 1.安装mysql 地址:https://www.cnblogs.com/xuaa/p/10782352.html 2.下载Apollo源码到本地 地址:https://gith ...

  9. wav音频的剪切

    wav格式音频剪切功能的完美实现方案. import java.io.*; import javax.sound.sampled.*; public class AudioFileProcessor ...

  10. Anaconda配置Python开发环境

    Anaconda介绍 Anaconda 是在 linux.windows 和 mac os x 上执行 Python/R 数据分析和机器学习的最简单的方式并且它是开源的.它在全球拥有超过 1, 100 ...