K - Jury Compromise

参考:ACM POJ 1015 Jury Compromise(陪审团的人选,动态规划题,难)

说实话真有点难想,用一个DP[i][j]来表示在选取i个人,辩控差为jj值已做些许处理)时辩控总分的最大值,用三个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;
}

最新文章

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

热门文章

  1. 关于typora换行的问题
  2. ASP.NET Core中间件实现分布式 Session(转载)
  3. gzip: stdin: not in gzip format 解决办法
  4. HTML and CSS basis
  5. vue组件之间的传值
  6. springboot有第三方jar打包成jar
  7. vscode go开发主要插件
  8. celery最佳体验
  9. JavaSpring【三、Bean】
  10. list列表的使用