题意:

选陪审团。n个候选人,选出m个人加入陪审团。辩方和控方会给n个人中的每一个人打分,分值0-20,辩方分值所加和为D,控方为P,要求 |D-P| 最小,如果方案不唯一,则选 D+P 最大的方案。

思路:

记 f[i][j] 为挑出 i 个人,分差为 j 时,总分值最大。

则 f[i][j] = max( f[i][j] , f[i-1][ j-a[k] ]+b[k] ),进行循环操作即可,详细见代码。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define rep(i,a,b) for(int i=a;i <= b;i++)
#define per(i,a,b) for(int i=a;i >= b;i--)
using namespace std;int f[30][810],path[30][810],a[300],b[300];  //path[i][j]表示状态f[i][j]是选了哪个候选人而得到的
int n,m,now;inline bool find(int i,int j,int k)
{if(i==0) return false;if(path[i][j] == k) return true;return find(i-1,j-a[path[i][j]],k);
}int main()
{int cas(0);while(scanf("%d%d",&n,&m),n+m){memset(f,-1,sizeof f);rep(i,1,n){int x,y;scanf("%d%d",&x,&y);a[i] = x-y; //记录差值 b[i] = x+y; //记录总和 }now = m*20; //最大差值   以now为基准点,0点 f[0][now] = 0;  //f的值 记录 D+P 的最大值rep(i,1,m)rep(j,0,2*now)if(~f[i-1][j]) //~-1 == 0   前i-1个人达不到差值为j,则不用再根据该点更改i的值 rep(k,1,n) //用f[i-1][j]对每一个点进行更改 if(!find(i-1,j,k)) //第k个选手不在f[i-1][j]的路径上 {if(f[i][j+a[k]] < f[i-1][j]+b[k]) //选 D+P 最大的 {f[i][j+a[k]] = f[i-1][j]+b[k];path[i][j+a[k]] = k;//  cout<<path[i][j+a[k]]<<" i: "<<i<<" j+a[k]: "<<j+a[k]<<endl;}}int tmp = 0x7fffffff;   //赋值的原因是第二个循环涉及tmp的比较,如果第一个循环没找到值的话,那么tmp非最大值,第二个循环就凉了 int ans;cout<<ans<<endl;rep(i,now,2*now){  //差值从-now~nowif(~f[m][i]){tmp = i-now;ans = f[m][i];break;}}per(i,now,0){if(~f[m][i]){if(now-i < tmp ||( (now-i) == tmp && f[m][i] > ans)){tmp = i-now;ans = f[m][i];break;}}}
//      cout<<tmp<<endl;printf("Jury #%d\n",++cas);int x = (tmp+ans)>>1,y = ans-x;printf("Best jury has value %d for prosecution and value %d for defence: \n",x,y);int tot = 0;int q[30];x = m;y = tmp+now;while(x){q[++tot] = path[x][y];y -= a[path[x][y]];x--;}sort(q+1,q+tot+1);rep(i,1,m)printf(" %d",q[i]);puts("\n");     }return 0;
} 

POJ1015 Jury Compromise【背包问题】相关推荐

  1. poj1015 Jury Compromise

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

  2. Jury Compromise POJ - 1015

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

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

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

  4. POJ 1015 Jury Compromise dp分组

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

  5. kuangbin专题十二 基础DP

    kuangbin专题十二 基础DP A - HDU1024 Max Sum Plus Plus B - HDU1029 Ignatius and the Princess IV C - HDU1069 ...

  6. OI每周刷题记录——lrllrl

    看这标题就知道我是模仿的hzwer大佬,远程%%% 大佬的OI经历让蒟蒻我深受感触,为了晚一些AFO本蒟蒻也得加油了 从高二上期第一周开始计数,每个星期天更一次,一直更到我AFO 如果这是我此生最后一 ...

  7. 0x52. 动态规划 - 背包(习题详解 × 19)

    目录 0x52. 动态规划 - 背包 0x52.1 0/10/10/1 背包 Problem A. 数字组合 Problem B. 背包问题求具体方案 Problem C. jury Compromi ...

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

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

  9. 『ACM-算法-动态规划』初识DP动态规划算法

    一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...

  10. 神牛笔记:吉林大学ACM总结(fennec)

    其实在北京比赛完的时候,我就想写了,不过还是早了点,直到上海比赛结束,大家的心中都不是太好受.郭老师有句话:你们这样做也是对的,不成功就成仁.让我的心也能安慰了不少. 我是从大一下学期开始接触ACM的 ...

最新文章

  1. 项目3:(4)点到直线的距离以及夹角
  2. 【CocoaPods】CocoaPods:Objective-C依赖库管理(XCode 4.6)
  3. 2021年春季学期-信号与系统-第十四次作业参考答案-第二小题参考答案
  4. mysql8.0.12插件_mysql 8.0.12 安装使用教程
  5. java juc包多线程编程案例:Executor入门示例
  6. kafka-manager 安装
  7. java图形用户登录界面_Java简单登录图形界面
  8. JAVA调用动态链接库
  9. 论剑乌镇:历届互联网大会热词盘点
  10. 对Windows学习的总结
  11. Linux里如何查找文件内容
  12. 刨根究底字符编码之八——Unicode编码方案概述
  13. PS改变图片颜色的方法
  14. ThreadLocal 简单了解
  15. 一文读懂供应链金融及其衍生产品
  16. 动态规划算法思想解决找零钱问题
  17. Android VideoView播放网络视频简介
  18. mysql+过滤纯标点符号,用正则表达式去除标点符号
  19. Robot Framework自动化测试解决selenium2library加载失败
  20. (附源码)springboot+mysql+基于web的在线问答社区系统设计与实现 毕业设计061628

热门文章

  1. 设计模式之Interpreter(解释器)
  2. Enterprise Manager 无法连接到数据库实例。下面列出了组件的状态。
  3. [ASM] 基础概念
  4. xsehll不能删除字符的解决方案
  5. 费马定理中值定理_长盛不衰的法国数学|费马
  6. 求一篇计算机word文档作业,计算机应用基础作业3:Word2003
  7. 讲python现状的文章_用 Python 分析 Python 工作现状
  8. 控制反转和依赖注入的理解(通俗易懂)_Spring 的本质系列之依赖注入_一点课堂(多岸学院)...
  9. ppt地图分布图一块一块的怎么做_没想到PPT还能这样做动态地图,实在是太炫酷了,用了再也离不开...
  10. STL容器 之 vector