C++-POJ1015-Jury Compromise
Java实现会MLE那我也没办法了
//辩方总分和控方总分之差简称为“辩控差”
//辩方总分和控方总分之和简称为“辩控和”
//现用f(j, k)表示,取j 个候选人,使其辩控差为k 的所有方案中,辩控和最大的那个方案
//规定,如果没法选j 个人,使其辩控差为k,那么f(j, k)的值就为-1,称方案f(j, k)不可行
//那么,如果对k 的所有可能的取值,求出了所有的f(m, k) (-20×m≤ k ≤ 20×m),那么陪审团方案自然就很容易找到了
//显然,方案f(j, k)是由某个可行的方案f(j-1, x) (-20×m ≤ x ≤ 20×m)演化而来的
//而且,由于题目中辩控差的值k 可以为负数,而程序中数租下标不能为负数
//所以,在程序中不妨将辩控差的值都加上20*m,以免下标为负数导致出错
#include<vector>
#include<cstdio>
#include<iostream>
using namespace std;
int dp[][],sub[],sum[];
vector<int> path[][];
int main() {
for(int n,m,Case=;~scanf("%d%d",&n,&m) && n && m;) {
for(int i=; i<; i++)for(int j=; j<; j++)path[i][j].clear();//清空vector
for(int i=; i<; i++)for(int j=; j<; j++)dp[i][j]=-;
for(int i = ,d,p; i <= n; i++) cin>>d>>p,sub[i] = d-p,sum[i] = d+p;
int ans = *m,x;
dp[][ans] = ;
int time1=;
for(int k = ; k <= n; k++)//选择一个
for(int i = m-; i >= ; i--)//进行逆推
for(int j = ; j < *ans; j++)
if(dp[i][j] >= ) {
if(dp[i+][j+sub[k]] <= dp[i][j] + sum[k]) {
dp[i+][j+sub[k]] = dp[i][j] + sum[k];
path[i+][j+sub[k]] = path[i][j];//每次更新都要把path全部复制过来,就是因为这个才用的vector
path[i+][j+sub[k]].push_back(k);
}
}
for(x = ; dp[m][ans+x] == - && dp[m][ans-x] == -; x++);
int temp = (dp[m][ans+x] > dp[m][ans-x]) ? x : -x;
int sumD = (dp[m][ans+temp] + temp )/;
int sumP = (dp[m][ans+temp] - temp )/;
printf( "Jury #%d\n",++Case);
printf( "Best jury has value %d for prosecution and value %d for defence:\n", sumD,sumP);
for(int i=; i < m; i++ )printf( " %d", path[m][ans+temp][i]);
printf( "\n\n" );
}
return ;
}
C++-POJ1015-Jury Compromise的更多相关文章
- poj1015 Jury Compromise【背包】
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions:32355 Accepted:8722 ...
- 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
题目大意:要求你从n个人中选出m个,每个人有两个值p[i],D[i],要求选出的人p总和与D总和的差值最小.若有相同解,则输出p总+D总最大的方案. 动态规划. 一直在想到底是n枚举外面还是m放外面, ...
- poj1015 Jury Compromise[背包]
每一件物品有两个属性.朴素思想是把这两种属性都设计到状态里,但空间爆炸.又因为这两个属性相互间存在制约关系(差的绝对值最小),不妨把答案设计入状态中,设$f[i][j]$选$i$个人,两者之差$j$. ...
- $POJ1015\ Jury\ Compromise\ Dp$/背包
洛谷传送门 $Sol$ 这是一道具有多个“体积维度”的$0/1$背包问题. 把$N$个候选人看做$N$个物品,那么每个物品有如下三种体积: 1.“人数”,每个候选人的“人数”都是$1$,最终要填满容积 ...
- POJ 1015 Jury Compromise(双塔dp)
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33737 Accepted: 9109 ...
- HDU 1015 Jury Compromise 01背包
题目链接: http://poj.org/problem?id=1015 Jury Compromise Time Limit: 1000MSMemory Limit: 65536K 问题描述 In ...
- 背包系列练习及总结(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 ...
- 【题解】Jury Compromise(链表+DP)
[题解]Jury Compromise(链表+DP) 传送门 题目大意 给你\(n\le 200\)个元素,一个元素有两个特征值,\(c_i\)和\(d_i\),\(c,d \in [0,20]\), ...
- poj 1015 Jury Compromise(背包+方案输出)
\(Jury Compromise\) \(solution:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...
随机推荐
- Python学习笔记一:变量、函数
变量.函数是Python语言的最基本单元,下面是我作为初学者的当前理解,随着学习的深入今后会做刷新. 变量:表示操作对象是谁. 变量的方法:表示能做什么事情. 如何设计变量:先分析需要解决的问题,基于 ...
- scrapy框架综合运用 爬取天气预报 + 定时任务
爬取目标网站: http://www.weather.com.cn/ 具体区域天气地址: http://www.weather.com.cn/weather1d/101280601.shtm(深圳) ...
- 树莓派3b 换国内源 更新源
在国内要更新源的时候,因为是国外的源,总会出现网速太慢的问题, 以下是对于安装了,2017-11-29-raspbian-stretch 系统源 更换最好用root登陆操作 sudo passwd r ...
- linux100讲——03 什么是linux
1.linux 有两种含义: 一种是linus 编写的开源操作系统的内核 另一种是广义的操作系统 2.linux的第一印象 服务端操作系统和客户端操作系统要做的事情不一样 命令行操作方式与图形界面的差 ...
- c++ md5算法实现(转)
原文链接:C++计算文件的MD5值 其他:c++输入文件流ifstream用法详解
- string类型的应用场景 —— Redis实战经验
string类型是实战中应用最多的数据类型,Redis的一些特性决定了string类型的应用场景. 1. Redis的数据是共享的 如果将用户信息存储在web服务的本地缓存,则每个web服务都会缓存一 ...
- 你不知道的JavaScript下卷
阿喀琉斯之踵 学习编程最好的办法就是编写代码 比较 隐式类型转换 数字和字符串 比较 字符串会隐式转换为数字,再进行比较 == 类型转换 ecma
- 开始自学JAVA了,找到一点有用的资料(不定时更新)
入门代码https://blog.csdn.net/salmonwilliam/article/details/81952387 高精度https://www.cnblogs.com/downrain ...
- MPI Maelstrom POJ - 1502 floyd
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> usin ...
- AcWing 11. 背包问题求方案数
//g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]= ...