描述在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定。陪审团是由法官从公众中挑选的。先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团。选m人的办法是:

控方和辩方会根据对候选人的喜欢程度,给所有候选人打分,分值从0到20。为了公平起见,法官选出陪审团的原则是:选出的m个人,必须满足辩方总分和控方总分的差的绝对值最小。如果有多种选择方案的辩方总分和控方总分的之差的绝对值相同,那么选辩控双方总分之和最大的方案即可。输入输入包含多组数据。每组数据的第一行是两个整数n和m,n是候选人数目,m是陪审团人数。注意,1<=n<=200, 1<=m<=20 而且 m<=n。接下来的n行,每行表示一个候选人的信息,它包含2个整数,先后是控方和辩方对该候选人的打分。候选人按出现的先后从1开始编号。两组有效数据之间以空行分隔。最后一组数据n=m=0输出对每组数据,先输出一行,表示答案所属的组号,如 'Jury #1', 'Jury #2', 等。接下来的一行要象例子那样输出陪审团的控方总分和辩方总分。再下来一行要以升序输出陪审团里每个成员的编号,两个成员编号之间用空格分隔。每组输出数据须以一个空行结束。样例输入

4 2
1 2
2 3
4 1
6 2
0 0

样例输出

Jury #1
Best jury has value 6 for prosecution and value 4 for defence:
2 3
/*
自己写了一个三维状态的f[i][j][k]表示前i个选了j个,相差k的最大值,但是无奈怎么也过不去。
题解设的是二维的,把第一位去掉了,转移比较巧妙。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 310
#define M 1010
using namespace std;
int f[N][M],pa[N][M];;
int a[N],b[N],Answer[N],n,m,Cas; int main(){
while(scanf("%d%d",&n,&m)){
if(n==&&m==) break;
for(int i=;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
memset(f,-,sizeof(f));
memset(pa,,sizeof(pa));
int base=m*;
f[][base]=;
for(int j=;j<m;j++)
for(int k=;k<=base*;k++)
if(f[j][k]>=){
for(int i=;i<=n;i++)
if(f[j][k]+a[i]+b[i]>f[j+][k+a[i]-b[i]]){
int t1=j,t2=k;
while(t1>&&pa[t1][t2]!=i){
t2-=a[pa[t1][t2]]-b[pa[t1][t2]];
t1--;
}
if(t1==){
f[j+][k+a[i]-b[i]]=f[j][k]+a[i]+b[i];
pa[j+][k+a[i]-b[i]]=i;
}
}
}
int i=base,j=,k;
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",++Cas);
printf("Best jury has value %d for prosecution and value %d for defence:\n",(k-base+f[m][k])/,(f[m][k]-k+base)/);
for(i=;i<=m;i++)
{
Answer[i]=pa[m-i+][k];
k-=a[Answer[i]]-b[Answer[i]];
}
sort(Answer+,Answer+m+);
for(i=;i<=m;i++)
printf(" %d",Answer[i]);
printf("\n\n");
}
}

Jury Compromise(poj 1015)的更多相关文章

  1. (最优m个候选人 和他们的编号)Jury Compromise (POJ 1015) 难

    http://poj.org/problem?id=1015   Description In Frobnia, a far-away country, the verdicts in court t ...

  2. (记忆化搜索)Jury Compromise (poj 1015)

    http://acm.fzu.edu.cn/problem.php?pid=1005 Description The fastfood chain McBurger owns several rest ...

  3. POJ 1015 Jury Compromise(双塔dp)

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

  4. POJ 1015 Jury Compromise(dp坑)

    提议:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m人组成陪审团.选m人的办法是:控方和辩方会根据对候选 ...

  5. POJ 1051 Jury Compromise ——(暴力DP)

    题目不难,暴力地dp一下就好,但是不知道我WA在哪里了,对拍了好多的数据都没找出错误= =.估计又是哪里小细节写错了QAQ..思路是用dp[i][j]表示已经选了i个,差值为j的最大和.转移的话暴力枚 ...

  6. POJ1015 && UVA - 323 ~Jury Compromise(dp路径)

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

  7. poj 1015 Jury Compromise(背包+方案输出)

    \(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...

  8. 01背包问题:Charm Bracelet (POJ 3624)(外加一个常数的优化)

    Charm Bracelet    POJ 3624 就是一道典型的01背包问题: #include<iostream> #include<stdio.h> #include& ...

  9. Scout YYF I(POJ 3744)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5565   Accepted: 1553 Descr ...

随机推荐

  1. JavaScript两种创建标签的的方法,实现点击按钮让text自增

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Linux下 tomcat 的开机自启动设置

    每次开机都要启动tomcat,非常麻烦:通过直接修改系统文件,实现tomcat自启动: 1. 修改脚本文件rc.local:vim /etc/rc.d/rc.local 这个脚本是使用者自定的开机启动 ...

  3. Linux监控一之Nagios的安装与配置

    一.Nagios简介 Nagios是一款开源的电脑系统和网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报 ...

  4. html5支持drag的拖放排序插件sortable.js

    html5支持drag的拖放排序插件sortable.js <script src="//cdnjs.cloudflare.com/ajax/libs/Sortable/1.5.1/S ...

  5. linux批量替换

    sed -i "s/李三/李四/g"  -r result/*       将result文件夹下的所有文件中的李三替换成李四 sed命令下批量替换文件内容  格式: sed -i ...

  6. Android如何添加多张引导页

    摘要:项目需要添加多张引导页,所以在网上搜集了一些资料并整理好. Step1 添加一个GuideActivity. 其实这个引导页无非就是一个Activity,里面有一个ViewPager而已.多张图 ...

  7. OpenCV学习笔记(六) 滤波器 形态学操作(腐蚀、膨胀等)

    转自:OpenCV 教程 另附:计算机视觉:算法与应用(2012),Learning OpenCV(2009) 平滑图像:滤波器 平滑 也称 模糊, 是一项简单且使用频率很高的图像处理方法.平滑处理的 ...

  8. 4152: [AMPPZ2014]The Captain

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1561  Solved: 620[Submi ...

  9. CodeForces 781E Andryusha and Nervous Barriers 线段树 扫描线

    题意: 有一个\(h \times w\)的矩形,其中有\(n\)个水平的障碍.从上往下扔一个小球,遇到障碍后会分裂成两个,分别从障碍的两边继续往下落. 如果从太高的地方落下来,障碍会消失. 问从每一 ...

  10. Unable to execute dex: Multiple dex files define Lcom/myapp/R$array;

    Unable to execute dex: Multiple dex files define Lcom/myapp/R$array; 我这个问题最后解决方式是,吧工程里面用同一个v4包. 很明显, ...