HDU POJ 1015 Jury Compromise(陪审团的人选,DP)
题意:
在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定。陪审团是由法官从公众中挑选的。先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团。选m人的办法是:
控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0到20。为了公平起见,法官选出陪审团的原则是:选出的m个人,必须满足辩方总分和控方总
分的差的绝对值最小。如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案即可。
思路:详见代码
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define clc(a,b) sizeof(a,b,sizeof(a))
#define LL long long
#include<cmath>
using namespace std;
int p[],d[];
int f[][];//选i个人评审差为j时,评审和最大值。转移方程:f[i][j]=f[i-1][x]+d[k]+p[k];且x+p[k]-d[k]=j;{f[i-1][x]}满足条件的最大值.
int path[][];//记录i个人评审差为j,这种情况下的前一个人i-1是谁;
int ans[];
int main() {
// freopen("in.txt","r",stdin);
int n,m;
int grade;
int casee=;
while(scanf("%d%d",&n,&m),n||m) {
casee++;
for(int i=; i<=n; i++) {
scanf("%d%d",&p[i],&d[i]);
}
// clc(f,-1);
// clc(path,0);
memset(f,-,sizeof(f));
memset(path,,sizeof(path));
grade=m*;//避免下标为负,所以推广到零以上
f[][grade]=;//初始化条件
for(int i=; i<=m; i++) {
for(int j=; j<=grade*; j++) {
if(f[i][j]>=) {
for(int k=; k<=n; k++) {
if(f[i][j]+d[k]+p[k]>f[i+][j+p[k]-d[k]]) {
int t1=i,t2=j;
while(t1>&&path[t1][t2]!=k) {
t2-=p[path[t1][t2]]-d[path[t1][t2]];
t1--;
}//判断k是不是前面已经选过了
if(t1==) {
f[i+][j+p[k]-d[k]]=f[i][j]+d[k]+p[k];
path[i+][j+p[k]-d[k]]=k;
}
}
}
}
}
}
int i=grade;
int j=;
int k;
// printf("%d\n",f[m][42]);
while(f[m][i+j]<&&f[m][i-j]<) {
j++;
}//选出评审分绝对值最小
if(f[m][i+j]>f[m][i-j])
k=i+j;
else
k=i-j;
printf("Jury #%d\n",casee);
printf("Best jury has value %d for prosecution and value %d for defence:\n",(k-grade+f[m][k])/,(f[m][k]-k+grade)/);
for(i=; i<=m; i++) {
ans[i]=path[m+-i][k];
k-=p[ans[i]]-d[ans[i]];
}
sort(ans+,ans+m+);
for(i=; i<=m; i++) {
printf(" %d",ans[i]);
}
printf("\n\n");
}
}
HDU POJ 1015 Jury Compromise(陪审团的人选,DP)的更多相关文章
- 背包系列练习及总结(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 ...
- 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(双塔dp)
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33737 Accepted: 9109 ...
- poj 1015 Jury Compromise(背包+方案输出)
\(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...
- POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目
http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...
- POJ 1015 Jury Compromise dp分组
第一次做dp分组的问题,百度的~~ http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑 ...
- [Poj 1015] Jury Compromise 解题报告 (完全背包)
题目链接:http://poj.org/problem?id=1015 题目: 题解: 我们考虑设计DP状态(因为这很显然是一个完全背包问题不是吗?) dp[j][k]表示在外层循环到i时,选了j个人 ...
- 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 ...
- POJ 1015 Jury Compromise(dp坑)
提议:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候选 ...
随机推荐
- OSG-3.4.0 简要说明(Readme)
欢迎来到OpenSceneGraph(OSG)世界. Welcome to the OpenSceneGraph (OSG). 对于项目最新信息, 以及如何编译和运行库和示例的更多细节, 可以查看OS ...
- 【BZOJ】1001: [BeiJing2006]狼抓兔子 Dinic算法求解平面图对偶图-最小割
1001: [BeiJing2006]狼抓兔子 Description 左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下 三种类型的道路 1:(x,y)<==>( ...
- “0x5003eaed” 指令引用的“0x00000000”内存。该内存不能为“read”
一.问题描述与原因分析 1.问题描述 使用VC6.0,在工具栏点击“打开文件”或者“添加文件到项目”的图标时,提示如题的错误. 2.原因分析 微软的VC6.0与office2007冲突问题. 二.解决 ...
- 计算器(console version)
题目描述 请用python编写一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算. 输入描述 数字包括& ...
- Layer 1: Single Objects
Layer 1: 单一对象 粗略的说, 在javascript中所有对象都是maps的键值对. 键值对的实体在对象中称为属性( property).属性的key经常为 string类型,而他的valu ...
- 网络编程(一) 利用NSURLSession发送GET POST请求
Xcode 7.0后,http链接不能直接访问(https可以),需要在Info.plist增加下面一项才能正确访问. 使用NSURLSession进行网络请求的流程: 1.构造NSURL 2.构造N ...
- File List()列出文件目录
import java.io.File; public class FileTest { public static void main(String[] args) { File myFile = ...
- JAVA bean与XML互转的利器---XStream
最近在项目中遇到了JAVA bean 和XML互转的需求, 本来准备循规蹈矩使用dom4j忽然想起来之前曾接触过的XStream, 一番研究豁然开朗,利器啊利器, 下来就XStream的一些用法与大家 ...
- A9两款芯片管脚数目
Exynos 4412 bga786; S5P4418 bga513
- 编译android后找不到ramdisk-u.img[已解决]
--- --- #!/bin/bash OUTDIR=out/target/product/tiny4412AHOSTBIN=out/host/linux-x86/bin # install vend ...