Jury Compromise
2024-10-06 19:02:08
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;
}
最新文章
- yii2中如何使用modal弹窗之基本使用
- python学习之——调用adb命令完成移动端界面测试
- 关于“windows无法自动将ip协议栈绑定到网络适配器”问题导致不能连上网的解决办法
- iOS7隐藏状态栏 statusBar
- JS基本概念 -- 数据类型(一)
- 第二章 OO大原则
- javascript 与和非
- Yii 框架表单验证---实例
- selenium python (十四)上传文件的处理
- CentOS 6.7安装Java JDK
- (step6.3.5)hdu 1281(棋盘游戏——二分图的完美匹配)
- 四级地址插件升级改造(京东商城地址选择插件)city-picker
- HTTP 和 WebSocket的区别
- 【原创开源】网络版二代双通道示波器开源发布,支持电脑,手机和Pad等各种OS平台访问
- C++ 编程技巧笔记记录(持续更新)
- C++ Primer 笔记——固有的不可移植的特性
- Java实验-课程设计报告一:个人银行账户管理系统SavingAccountManageSystem-具体文档+源码
- 软件产品案例分析——福州大学微信小程序
- 使用JS生成二维码QRCode
- Linux学习笔记<;五>;——<;Shell部分>;