传送门:http://poj.org/problem?id=1015

解题思路:

实现代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int MAXN=1000;
const int INF=1<<30;
int dp[30][MAXN],Path[30][MAXN];
int D[MAXN],P[MAXN];/*
dp[j][k]:选取第j个人(也就是总共选了j个人),其辩控差为k时,其辩方和空方的和。
为了防止k是负数,我们将k向右移动m×20
设我们选的第j个人的编号是i(1<=i<=m)
dp[j][k]=max(dp[j][k],dp[j-1][k-P[i]+D[i]]+D[i]+P[i];Path[j][k]:选择第j个人其辩控差为k在n个人中的编号
那么第j-1选择的人编号Path[j-1][k-D[Path[j][k]]+P[Pah[j][k]]]
*/int main(){int n,m;int iCase=0;while(scanf("%d%d",&n,&m)!=EOF||(n!=0&&m!=0)){for(int i=1;i<=n;i++)scanf("%d%d",&P[i],&D[i]);int IMAX=m*20;memset(dp,-1,sizeof(dp));memset(Path,0,sizeof(Path));dp[0][IMAX]=0;for(int j=0;j<m;j++){for(int k=0;k<=IMAX*2;k++){if(dp[j][k]>=0){for(int i=1;i<=n;i++){if(dp[j][k]+D[i]+P[i]>dp[j+1][k+P[i]-D[i]]){int t1=j,t2=k;while(t1>0&&Path[t1][t2]!=i){t2-=P[Path[t1][t2]]-D[Path[t1][t2]];t1--;}if(t1==0){dp[j+1][k+P[i]-D[i]]=dp[j][k]+D[i]+P[i];Path[j+1][k-D[i]+P[i]]=i;}}}}}}int i=IMAX;int j=0;int k;while(dp[m][i-j]<0&&dp[m][i+j]<0)j++;if(dp[m][i+j]>dp[m][i-j])k=i+j;elsek=i-j;printf("Jury #%d\n",++iCase);printf("Best jury has value %d for prosecution and value %d for defence:\n",(k-IMAX+dp[m][k])/2,(dp[m][k]-k+IMAX)/2);int Answer[MAXN];for(i=0;i<m;i++){Answer[i]=Path[m-i][k];k-=P[Answer[i]]-D[Answer[i]];}sort(Answer,Answer+m);for(i=0;i<m;i++)printf(" %d",Answer[i]);printf("\n\n");}
}

转载于:https://www.cnblogs.com/IKnowYou0/p/6627010.html

POJ 1015 Jury Compromise相关推荐

  1. POJ 1015 Jury Compromise dp分组

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

  2. poj 1015 Jury Compromise_dp

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

  3. Jury Compromise POJ - 1015

    Jury Compromise POJ - 1015 题意: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中 ...

  4. POJ1015陪审团(Jury Compromise)——dp+路径记录

    题目:http://poj.org/problem?id=1015 差值是有后效性的,所以"转化为可行性",开一维记录"能否达到这个差值". 当然可以开两维分别 ...

  5. poj1015 Jury Compromise

    dp题,类似于01背包的转移 需要注意的是:背包容量在有的时候可能为负数,所以需要算出最大数据量整体平移 像01背包一样直接倒序循环j并不能保证每一个物品只选一个,两个等价的物品在计算时可能会重复使用 ...

  6. poj 1015(dp)

    看的解题报告..http://blog.csdn.net/lyy289065406/article/details/6671105 View Code 1 #include <iostream& ...

  7. POJ 1015 陪审团问题

    题意略. 思路: 这个题目开始我本来打算用个二维dp,令dp[ i ][ j ]为考虑前i个人,有j个名额的时候,我所能获取的最小差,后来发现不好转移.因为dp[ i ][ j ]有可能是+2, 也有 ...

  8. poj 1015 陪审团

    这是一道动规题,感觉很难,下面是分析: 在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n 个人作为陪审团的候选人,然后再从这n 个人中选m 人组成陪审团 ...

  9. kuangbin带你飞专题合集

    题目列表 [kuangbin带你飞]专题一 简单搜索 [kuangbin带你飞]专题二 搜索进阶 [kuangbin带你飞]专题三 Dancing Links [kuangbin带你飞]专题四 最短路 ...

  10. 动态规划总结与题目分类

    源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...

最新文章

  1. web前端 react与vue 流行框架的比较
  2. 一前端去相亲网站找对象,朋友问:找到了吗?这回复太专业...
  3. 添加MSDN搜索的正确方法
  4. JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor
  5. J2EE中下载和安装spring插件
  6. 如何让你的 JS 写得更漂亮,看这篇就对了!
  7. ecshop在首页调用dedecms文章
  8. Java集合(四):Map映射
  9. 蚂蚁金服OceanBase性价比是传统数据库的十倍
  10. 【转】MyBatis缓存机制
  11. mysql条件变量单引号_mysql语法
  12. 安卓手机误删文件恢复
  13. 概率论与数理统计学习笔记——第7讲——连续型随机变量(2.5.4指数分布及其与泊松分布的关系)
  14. 分分钟用上C#中的委托和事件
  15. Blocking Queue
  16. 深度学习方面的论文整理
  17. 上海大专计算机专业排名,2019上海软科世界一流学科排名计算机科学与工程专业排名乔治华盛顿大学排名第301-400...
  18. Java 根据经纬度计算两点间的距离
  19. Java制导软件_GitHub - yaoceyi/JavaCC: JavaCC实现简易编译器
  20. spark(kryo)、hadoop(writable)、jdk(serializable)-序列化

热门文章

  1. 【sklearn第六讲】特征提取(下)
  2. CFileDialog用法详解
  3. 工具使用教程(三)【Anaconda虚拟环境下使用Juypter Notebook】
  4. 微信小程序生成海报分享:canvas绘制文字溢出如何换行
  5. spring+mybatis+log4j 输出SQL
  6. Linux下 jenkins 的 使用
  7. [转]《帮我买个单》
  8. C# 启动停止SQLServer数据库服务器
  9. 初学Flask(1)
  10. C#属性(Attribute)用法实例解析