题意:n个陪审团,每个陪审团有x,y值,选出m个陪审团,要求 (sum(xi)-sum(yi))最少,当 (sum(xi)-sum(yi))最少有多个,取sum(xi)+sum(yi)最大那个

,并顺序输出陪审团的序号

思路:先x-y,x+y存起来,再按当dp[i][j],j相同时,要值最大,当然存路径是最烦的。

  1. #include <iostream>
  2. #include<cstdio>
  3. #include <cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. #define N 210
  7. int path[25][1000],map[25][1000],n,m,sub[25*10],plusa[25*10],size,ans[25];
  8. int main(int argc, char** argv) {
  9. int i,j,k,x,y,cas=1;
  10. while(scanf("%d%d",&n,&m)!=EOF,n||m){
  11. for(i=1;i<=n;i++){
  12. scanf("%d%d",&x,&y);
  13. sub[i]=x-y;
  14. plusa[i]=x+y;
  15. }
  16. memset(map,-1,sizeof(map));
  17. memset(path,-1,sizeof(path));
  18. size=25*m;
  19. map[0][size]=0;
  20. path[0][size]=0;
  21. for(i=1;i<=n;i++){
  22. if(map[1][size+sub[i]]<plusa[i]){
  23. map[1][size+sub[i]]=plusa[i];
  24. path[1][size+sub[i]]=i;
  25. }
  26. }
  27. for(i=1;i<m;i++){
  28. for(j=0;j<2*size;j++)
  29. if(path[i][j]>=0){
  30. for(k=1;k<=n;k++){
  31. if(map[i+1][j+sub[k]]<map[i][j]+plusa[k]){
  32. for(x=i,y=j;x>=1;x--){
  33. if(path[x][y]==k)
  34. break;
  35. y-=sub[path[x][y]];
  36. }
  37. if(x<1){
  38. map[i+1][j+sub[k]]=map[i][j]+plusa[k];
  39. path[i+1][j+sub[k]]=k;
  40. }
  41. }
  42. }
  43. }
  44. }
  45. int num=0;
  46. for(i=0;i<=2*size;i++){
  47. if(map[m][size+i]>=0||map[m][size-i]>=0){
  48. if(map[m][size+i]>map[m][size-i])
  49. j=size+i;
  50. else
  51. j=size-i;
  52. break;
  53.  
  54. }
  55. }
  56. for(i=m,k=j;i>=1;i--){
  57. ans[num++]=path[i][k];
  58. k-=sub[ans[num-1]];
  59. }
  60. sort(ans,ans+num);
  61. printf("Jury #%d\n",cas++);
  62. printf("Best jury has value %d for prosecution and value %d for defence: \n",(map[m][j]+j-size)/2,(map[m][j]-(j-size))/2);
  63. for(i=0;i<num;i++){
  64. printf(" %d",ans[i]);
  65. }
  66. printf("\n");
  67. }
  68. return 0;
  69. }

poj 1015 Jury Compromise_dp的更多相关文章

  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 2个月后重做,其实这是背包题目

    http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...

  4. POJ 1015 Jury Compromise dp分组

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

  5. [Poj 1015] Jury Compromise 解题报告 (完全背包)

    题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...

  6. 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 ...

  7. HDU POJ 1015 Jury Compromise(陪审团的人选,DP)

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

  8. POJ 1015 Jury Compromise

    感觉此题略难...... 背包问题.据说有一种二维DP的写法是错的.亲测,背包做法无误. dp[i][j][k]表示前i个物品,选择j个,差值为k的情况下获得的最大总和 dp[i][j][k]=max ...

  9. POJ 1015 Jury Compromise (算竞进阶习题)

    01背包 我们对于这类选或者不选的模型应该先思考能否用01背包来解. 毫无疑问物体的价值可以看成最大的d+p值,那么体积呢?题目的另一个限制条件是d-p的和的绝对值最小,这启发我们把每个物体的d-p的 ...

随机推荐

  1. Oracle通过指令创建用户

    Oracle作为世界上使用最广泛的关系数据库,对于客户很多每天海量数据的公司是首要选择.我们公司在双十一期间,曾发生过每网点每天1G多的扫描数据量,全国有六千多个网点,每天每时不停读写数据库,而数据库 ...

  2. Eclipse代理设置

    这段时间公司实行代理上网,不仅通过浏览器上网须要不停的输入username和password,在本地调试程序时候Eclipse居然也弹出框让输入username和password. 如图: 解决的方法 ...

  3. Android设备内存和SD卡操作工具类

    package cc.c; import java.io.File; import java.util.List; import android.os.StatFs; import java.io.F ...

  4. [转]Laravel 4之请求

    Laravel 4之请求 http://dingjiannan.com/2013/laravel-request/ 获取请求数据 获取当前请求所包括的所有GET和POST数据 Route::get(' ...

  5. 解决jquery和其他库的冲突

    一.jquery在其他库之后导入 (1)jQuery.noConflict();  //将变量的$控制权转交给其他库.          jQuery(function(){             ...

  6. jQuery validate 的valid()方法一直返回true

    1 调用$('#myForm').valid(),一直返回ture eg:html <form id="myForm"> <input class="f ...

  7. js图片放大镜 可动态更换图片

    现仅已.NET为例,HTML代码如下 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > & ...

  8. Android-------- AlertDialog中EditText无法弹出输入法的解决

    文章转自:http://21jhf.iteye.com/blog/2007375: 如果AlertDialog中有编辑录入框(newMainLayout里面动态创建了EditText控件),show后 ...

  9. oracle 两个时间相减

    oracle 两个时间相减默认的是天数 oracle 两个时间相减默认的是天数*24 为相差的小时数 oracle 两个时间相减默认的是天数*24*60 为相差的分钟数 oracle 两个时间相减默认 ...

  10. Gengxin讲STL系列——Queue和Stack

    第三篇. 感觉队列和栈是必须的……所以决定加上这两个…… 我发现我已经买域名买上隐了……今天又买了个.top……真是智障…… Queue(队列FIFO)和Statk(栈LIFO). 那么为什么要这两个 ...