POJ1015-Jury Compromise-dp
略复杂的dp题。
有n个人,每个人有两个分数di,pi。从中选出m个人,要求|sigma(di)-sigma(pi)|最小,相同时则输出sigma(di)+sigma(pi)最大的情况。
答案完整输出方案。
dp[i][j]表示i个人的组合里,差值为j的情况下,和值的最大值。
计算每一个人的差值subi,和值sumi
则dp[i][j] = max(dp[i-1][j-subk]+sumk) k∈n
注意dp的时候为了能表示负数,要加一个修正值。
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int maxn = +;
const int X = ;
const int INF = 0x3f3f3f3f; int n,m;
int sum[maxn],sub[maxn];
int dp[][*maxn];
int path[][*maxn]; bool check(int i,int j,int k)
{
int tmp ;
while(path[i][X+j])
{
tmp = path[i][X+j];
if(k == tmp)
return false;
j -= sub[tmp];
i--;
}
return true;
} int main()
{
int cas = ;
while(scanf("%d%d",&n,&m) && n)
{
int d,p;
cas++;
for(int i=;i<=n;i++)
{
scanf("%d%d",&p,&d);
sum[i] = p+d;
sub[i] = p-d;
}
memset(dp,-,sizeof dp);
memset(path,,sizeof path); dp[][X+] = ; int ans_sub = +;
for(int i=;i<=m;i++)
{
for(int j=-;j<=;j++)
{
for(int k=;k<=n;k++)if(dp[i-][X+j-sub[k]] != - && check(i-,j-sub[k],k))
{
if(dp[i-][X+j-sub[k]]+sum[k] > dp[i][X+j])
{
dp[i][X+j] = dp[i-][X+j-sub[k]]+sum[k];
path[i][X+j] = k;
//printf("i:%d j:%d k:%d dp:%d\n",i,j,k,dp[i][X+j]);
if(i==m && ( abs(j) < abs(ans_sub) || (abs(j)==abs(ans_sub) && dp[i][X+j] > dp[i][X+ans_sub]) ) )
{
ans_sub = j;
}
}
}
}
} //printf("%d\n",ans_sub);
printf("Jury #%d\n",cas);
printf("Best jury has value %d for prosecution and value %d for defence: \n",(dp[m][X+ans_sub]+ans_sub)/,(dp[m][X+ans_sub]-ans_sub)/); int ans[],cnt=;
for(int i=m;i>=;i--)
{
ans[cnt++] = path[i][X+ans_sub];
ans_sub -= sub[ans[cnt-]];
}
sort(ans,ans+cnt); for(int i=;i<cnt;i++)
{
printf(" %d",ans[i]);
}
printf("\n\n");
}
}
最近dp写的略顺手
POJ1015-Jury Compromise-dp的更多相关文章
- POJ-1015 Jury Compromise(dp|01背包)
题目: In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting ...
- $POJ1015\ Jury\ Compromise\ Dp$/背包
洛谷传送门 $Sol$ 这是一道具有多个“体积维度”的$0/1$背包问题. 把$N$个候选人看做$N$个物品,那么每个物品有如下三种体积: 1.“人数”,每个候选人的“人数”都是$1$,最终要填满容积 ...
- poj1015 Jury Compromise【背包】
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions:32355 Accepted:8722 ...
- POJ1015陪审团(Jury Compromise)——dp+路径记录
题目:http://poj.org/problem?id=1015 差值是有后效性的,所以“转化为可行性”,开一维记录“能否达到这个差值”. 当然可以开两维分别记录 a 和 b,但 “值只是0或1” ...
- [POJ1015]Jury Compromise
题目大意:要求你从n个人中选出m个,每个人有两个值p[i],D[i],要求选出的人p总和与D总和的差值最小.若有相同解,则输出p总+D总最大的方案. 动态规划. 一直在想到底是n枚举外面还是m放外面, ...
- POJ 1015 Jury Compromise dp分组
第一次做dp分组的问题,百度的~~ http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑 ...
- poj1015 Jury Compromise[背包]
每一件物品有两个属性.朴素思想是把这两种属性都设计到状态里,但空间爆炸.又因为这两个属性相互间存在制约关系(差的绝对值最小),不妨把答案设计入状态中,设$f[i][j]$选$i$个人,两者之差$j$. ...
- POJ 1015 Jury Compromise dp
大致题意: 从n个候选人中选出m个人作为陪审团.为了让陪审团的选择更公平,辩方和控方都为这n个候选人给出了满意度(辩方为D[j],控方为P[j],范围0至20).现在要使得选出的m位候选人的辩方总和与 ...
- POJ 1015 Jury Compromise(双塔dp)
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33737 Accepted: 9109 ...
- 【题解】Jury Compromise(链表+DP)
[题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...
随机推荐
- APM实践目录
长路漫漫,如果不能作出一款可用开源的东西出来,那是对时光的浪费. 这是我的学习分布式调用链的实践之路! 思考大纲: .Net架构篇:思考如何设计一款实用的分布式监控系统? 理论篇: http:// ...
- 数据库(mysql)基本使用命令大全
1.查看数据库及表属性: 1)查看所有数据库 SHOW DATABASES; 2)选择使用的数据库 USE <DATABASE_NAME> 3)查看当前数据库下面的表 SHOW TABLE ...
- Mysql:is not allowed to connect to this MySQL server
连接mysql的时候发生这个错误:ERROR 1130: Host '192.168.1.110' is not allowed to connect to this MySQL server 解决方 ...
- Python_列表推导式_生成器的表达式_各种推导式_40
列表推导式: #列表推导式: egg_list = [] for i in range(10): egg_list.append('鸡蛋%s'%i) print(egg_list) egon egg_ ...
- A. Chess Placing
链接 [https://codeforces.com/contest/985/problem/A] 题意 给你一个偶数n,输入n/2个数,代表棋子的位置,有一个1*n的棋盘是黑白相间的 问你使得所有棋 ...
- ubuntu中搭建svn服务器步骤
1.安装软件包: sudo apt-get install subversion 2.建立相关文件夹(这里svn放在home文件夹中) cd /home sudo mkdir svn cd /home ...
- charles如何设置弱网
- 【Python3练习题 005】输入三个整数x,y,z,请把这三个数由小到大输出
import re x, y, z = re.split(',| |,| ', input('请输入3个数字,用逗号或空格隔开:'))x, y, z = int(x), int(y), int(z) ...
- checkbox操作判断 Jquery选择器
function checkAll(d){ console.log(d); console.log(d.checked); //注意 这里是d不是$(d) 不是jQuery对象 if(d.checke ...
- Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1)
Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1) 准备工作: java:java 8 或者 java 9: Spring框架:5.0.8.RELEASE或以 ...