略复杂的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的更多相关文章

  1. POJ-1015 Jury Compromise(dp|01背包)

    题目: In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting ...

  2. $POJ1015\ Jury\ Compromise\ Dp$/背包

    洛谷传送门 $Sol$ 这是一道具有多个“体积维度”的$0/1$背包问题. 把$N$个候选人看做$N$个物品,那么每个物品有如下三种体积: 1.“人数”,每个候选人的“人数”都是$1$,最终要填满容积 ...

  3. poj1015 Jury Compromise【背包】

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions:32355   Accepted:8722   ...

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

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

  5. [POJ1015]Jury Compromise

    题目大意:要求你从n个人中选出m个,每个人有两个值p[i],D[i],要求选出的人p总和与D总和的差值最小.若有相同解,则输出p总+D总最大的方案. 动态规划. 一直在想到底是n枚举外面还是m放外面, ...

  6. POJ 1015 Jury Compromise dp分组

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

  7. poj1015 Jury Compromise[背包]

    每一件物品有两个属性.朴素思想是把这两种属性都设计到状态里,但空间爆炸.又因为这两个属性相互间存在制约关系(差的绝对值最小),不妨把答案设计入状态中,设$f[i][j]$选$i$个人,两者之差$j$. ...

  8. POJ 1015 Jury Compromise dp

    大致题意: 从n个候选人中选出m个人作为陪审团.为了让陪审团的选择更公平,辩方和控方都为这n个候选人给出了满意度(辩方为D[j],控方为P[j],范围0至20).现在要使得选出的m位候选人的辩方总和与 ...

  9. POJ 1015 Jury Compromise(双塔dp)

    Jury Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 33737   Accepted: 9109 ...

  10. 【题解】Jury Compromise(链表+DP)

    [题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...

随机推荐

  1. 朱晔和你聊Spring系列S1E3:Spring咖啡罐里的豆子

    标题中的咖啡罐指的是Spring容器,容器里装的当然就是被称作Bean的豆子.本文我们会以一个最基本的例子来熟悉Spring的容器管理和扩展点. 阅读PDF版本 为什么要让容器来管理对象? 首先我们来 ...

  2. js实现活动倒计时

    let startTime = 1527647143949; // 开始时间 var time = new Countdown('timer',startTime); function Countdo ...

  3. Git简易的命令入门

    Git 全局设置: git config --global user.name "kszsa" git config --global user.email "duyon ...

  4. pycharm 报错:pycharm please specify a different SDK name

    我在给项目配虚拟环境里的解释器的时候有没有遇到过这个问题的啊,就是一个正常的项目,解释器忽然丢了,解释器是配在虚拟环境里面的,再去选择解释器就一直报这个错,给现有项目添加虚拟环境的时候也是报这个错—— ...

  5. iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏)

    iOS中的截屏(屏幕截屏及scrollView或tableView的全部截屏) 2017.03.16 12:18* 字数 52 阅读 563评论 4喜欢 2 1. 截取屏幕尺寸大小的图片并保存至相册 ...

  6. yield from

    一.yield 关于yield详细可参考我这篇文章 下面是一个带yield的生成器: def gen_yield(): while True: recv = yield do something wi ...

  7. Git push提交时报错Permission denied(publickey)...Please make sure you have the correct access rights and the repository exists.

    一.git push origin master 时出错 错误信息为: Permission denied(publickey). fatal: Could not read from remote ...

  8. ES5与ES6的小差异

    ES5与ES6的小差异 变量的定义 ES6与ES5的区别 ES5: <script> console.log(username); var username; var username = ...

  9. 03-命令图片.doc

  10. oracle导出用户下单表或者多表,导入到别的服务器用户下

      导出   exp 用户名/密码 file=存放dmp的名称的目录 statistics=none tables =(表名,表名,表名) exp creditfw/credit file=d:\te ...