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]\), ...
随机推荐
- 重装mysql后导致Navicat连接失败
今天重装了mysql数据库,然后再使用navicat去连接数据库的时候,一直报错 1251 Client does not support authentication protocol reques ...
- vue特殊属性 key ref slot
1.key 当使用key时,必须设置兄弟元素唯一的key,当key排列顺序变化时,兄弟元素会重新排列,而当key的值变化时,这个元素会被重新渲染. 有相同父元素的子元素必须有独特的 key.重复的 k ...
- Python遇到问题总结
1.list的集合 循环删除一个list数据时,会遇到一丢丢问题,详情看Python的list循环遍历中,删除数据的正确方法 但是,里面说的要反转一下list集合,可以用a[::-1]这种方法. &g ...
- PHP实用代码片段(四)
1. 删除文件夹内容 function Delete($path) { if (is_dir($path) === true) { $files = array_diff(scandir($path) ...
- iOS 判断当前网络状态的三种方法
http://www.cocoachina.com/ios/20171103/21039.html 在项目中,为了好的用户体验,有些场景必须线判断网络状态,然后才能决定改干嘛.比如视频播放,需要线判断 ...
- 快速为git添加一个用户
环境:用gitosis-admin管理git的权限. 前期git环境的搭建略去,主要给出快速添加一个用户的步骤: 在git bash中用“ssh-keygen -t rsa”生成公钥私钥,默认放到 “ ...
- Pyspider上手
pyspider安装: pip3 install Pyspider 启动服务操作 1.打开cmd:输入 pyspider --help 回车,可以查看帮助信息,pyspider all ...
- IdentityServer4【Topic】之保护APIs
Protecting APIs 保护api 默认情况下IdentityServer将access token发布成JWT(json web token)格式的. 现在,每个相关的平台都支持验证JWT令 ...
- [转帖]批处理-For详解
批处理-For详解 https://www.cnblogs.com/DswCnblog/p/5435300.html for 循环的写法 感觉非常好. 今天下午的时候简单测试了下. 多学习提高 非常重 ...
- js中this指向、箭头函数
普通函数:this指向分为4种情况,1. obj.getName();//指向obj2.getName();//非严格模式下,指向window,严格模式下为undefined3. var a = ne ...