Jury Compromise
K - Jury Compromise
说实话真有点难想,用一个
DP[i][j]来表示在选取i个人,辩控差为j(j值已做些许处理)时辩控总分的最大值,用三个for循环来更新这个值。具体思路还是看参考博客吧....
优先队列默认
top()是最大值,如果写成priority_queue<int,vector<int>,greater<int> >top()则为最小值
代码:
// Created by CAD on 2019/10/30.
#include <iostream>
#include <cstring>
#include <queue>
#include <vector>
#define mst(name, value) memset(name,value,sizeof(name))
using namespace std;
int dp[25][805],pre[25][805];
struct score{
int a,b;
}p[205];
priority_queue<int,vector<int>,greater<int> > q;
void print(int m,int n)
{
if(!pre[m][n]) return ;
print(m-1,n-(p[pre[m][n]].a-p[pre[m][n]].b));
q.push(pre[m][n]);
}
int main()
{
// FOPEN;
ios::sync_with_stdio(false);
cin.tie(0);
int m,n;
int Case=0;
while(cin>>n>>m,m|n)
{
for(int i=1;i<=n;++i)
cin>>p[i].a>>p[i].b;
mst(dp,-1);
mst(pre,0);
int full=m*20;
dp[0][full]=0;
for(int i=0;i<m;++i)
for(int j=0;j<=full*2;++j)
if(dp[i][j]>=0)
for(int k=1;k<=n;++k)
{
if(dp[i][j]+p[k].a+p[k].b>dp[i+1][j+p[k].a-p[k].b])
{
int a=i,b=j;
while(a>0&&pre[a][b]!=k)
b-=(p[pre[a][b]].a-p[pre[a][b]].b),a--;
if(!a)
dp[i+1][j+p[k].a-p[k].b]=dp[i][j]+p[k].a+p[k].b,
pre[i+1][j+p[k].a-p[k].b]=k;
}
}
int temp=0;
while(dp[m][full+temp]<0&&dp[m][full-temp]<0) temp++;
if(dp[m][full+temp]>dp[m][full-temp]) temp+=full;
else temp=full-temp;
cout<<"Jury #"<<++Case<<endl;
cout<<"Best jury has value "<< (temp-full+dp[m][temp])/2 <<
" for prosecution and value "<<(dp[m][temp]-temp+full)/2<<" for defence: "<<endl;
print(m,temp);
while(!q.empty())
cout<<" "<<q.top(),q.pop();
cout<<endl<<endl;
}
return 0;
}
Jury Compromise的更多相关文章
- 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 ...
- poj1015 Jury Compromise【背包】
Jury Compromise Time Limit: 1000MS Memory Limit: 65536K Total Submissions:32355 Accepted:8722 ...
- 背包系列练习及总结(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:\) 这道题很有意思,它的状态设得很...奇怪.但是它的数据范围实在是太暴露了.虽然当时还是想了好久好久,出题人设了几个限制(首先要两个的 ...
- POJ-1015 Jury Compromise(dp|01背包)
题目: In Frobnia, a far-away country, the verdicts in court trials are determined by a jury consisting ...
- ACM - 动态规划 - UVA323 Jury Compromise
UVA323 Jury Compromise 题解 考虑用动态规划.该问题要求解的最终状态为,选出的 \(m\) 个人,使得辩方总分与控方总分差的绝对值最小,总分之和最大.即 \(\left| D(\ ...
- POJ 1015 Jury Compromise 2个月后重做,其实这是背包题目
http://poj.org/problem?id=1015 题目大意:在遥远的国家佛罗布尼亚,嫌犯是否有罪,须由陪审团决定.陪审团是由法官从公众中挑选的.先随机挑选n个人作为陪审团的候选人,然后再从 ...
随机推荐
- DotNet跨平台 - .net core项目部署到centos7
环境说明 系统:CentOS Linux release 7.2.1511 (Core) 相关工具:VS2017 xftp 服务器软件:.net core2.0,nginx 准备.net core应 ...
- ScrumBasic开发记录
ScrumBasic 是基于asp.net core 1.0的开源敏捷管理软件.目前第一版.目前只有很基础的东西.希望我能将这个项目演变下去. 地址:https://github.com/CAH-Fl ...
- Boost,Eigen,Flann—C++标准库预备役
Boost,Eigen,Flann—C++标准库预备役 第一预备役:Boost Boost库是为C++语言标准库提供扩展的一些C++程序库的总称. Boost库由Boost社区组织开发.维护 ...
- struts访问jsp api内置对象的集中方式
1 default-action-ref元素改元素用来配置默认的action,如果struts找不到对应的action,就会调用这个默认的action 2 dmi处理方式是通过请求action中的一个 ...
- Oracle问题总结
1.账号锁定了 2.忘记密码 3.Oracle create session权利 4.oracle中单引号和双引号的作用 5.不支持 insert into tableName values (... ...
- Shell中比较判断
一.shell判断数组中是否包含某个元素:ary=(1 2 3)a=2if [[ "${ary[@]}" =~ "$a" ]] ; then echo & ...
- php连接docker运行的mysql,显示(HY000/2002): Connection refused的解决办法
php要连接docker中运行的mysql是不能用localhost, 127.0.0.1来连接的,因为每个docker运行容器的localhost 127.0.0.1都是自己容器本身,不是mysql ...
- pandas库的一些操作
1.pd.value_count():带入数值可以计算出value有多少的类别 #得到类别的降序 tips['day'].value_counts(sort=True,ascending=True) ...
- PAT Advanced 1153 Decode Registration Card of PAT (25 分)
A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...
- linux——在windows上搭建linux练习环境
程序员自己研究——java-linux-php——环境搭建 需要首选准备一个linux环境. 1,可用安装一个虚拟机:VMware虚拟机 2,安装一个VMware大约5分钟左右. 3,截止目前2019 ...