Jury Compromise

POJ-1015

#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cstdio>
using namespace std;
const int INF=0X3F3F3F3F;
const int maxn=203;
const int maxm=22;
int n,m;
int d[maxn],p[maxn];//被告和原告
int add[maxn],sub[maxn];//sub[i]表示辩控差也就是p-d
int dp[maxn][maxm][802];//dp[i][j][k]表示从前i个人里面选择j个人,辩控差为k时的最大值// dp[i,j,k]=max{dp[i-1,j,k],dp[i-1,j-1,k-d[i]]+ad[i]}
int path[maxn][maxm][802];
int ans[maxm];
struct node{
int defence;
int prosecute;
int num;
};
int main(){
int cases=0;
while(cin>>n>>m&&(n||m)){
for(int i=1;i<=n;i++){
cin>>p[i]>>d[i];
add[i]=p[i]+d[i];
sub[i]=p[i]-d[i];
}
memset(dp,-INF,sizeof(dp));
int fix=m*20;//表示修正值
for(int i=0;i<=n;i++){
dp[i][0][fix]=0;////由于修正了数值,因此dp[i][0][fix]才是真正的dp[i][0][0]
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i&&j<=m;j++){
for(int k=0;k<=fix*2;k++){
dp[i][j][k]=dp[i-1][j][k];
path[i][j][k]=path[i-1][j][k];
if(k>=sub[i]&&dp[i-1][j-1][k-sub[i]]>=0&&k-sub[i]<=2*fix){
if(dp[i-1][j-1][k-sub[i]]+add[i]>dp[i][j][k]){
dp[i][j][k]=dp[i-1][j-1][k-sub[i]]+add[i];
path[i][j][k]=i;
}
}
}
}
}
int diff,k;
for(k=0;k<=fix;k++){
if(dp[n][m][fix-k]>=0||dp[n][m][fix+k]>=0){
break;
}
}
if(dp[n][m][fix-k]>dp[n][m][fix+k]){
diff=fix-k;
}else diff=fix+k;
cout<<"Jury #"<< ++cases <<endl;
cout<< "Best jury has value ";
//辩方总值 = (辨控和+辨控差-修正值)/2
cout<<(dp[n][m][diff]+diff-fix)/2<<" for prosecution and value "; //控方总值 = (辨控和-辨控差+修正值)/2
cout<<(dp[n][m][diff]-diff+fix)/2<<" for defence:"<<endl;
//类似于背包输出路径
for (int i=n,j=m,k=diff; j>=1;)
{
int p = path[i][j][k] ;
ans[j] = p;
k -= sub[p];
j--;
i = path[p-1][j][k];//
}
for (int i=1; i<=m; i++)
{
cout << " " << ans[i];
}
cout<<endl<<endl;
}
return 0;
}

最新文章

  1. NET Core-学习笔记(一)
  2. 【Beta】Scrum09
  3. 使用HTML5的History API
  4. xhtmlConformance与xhtml脚本呈现
  5. Atitit 信用卡与会员卡(包括银行卡)的发展之路
  6. 从Setting.settings到Resource.resx
  7. Java中线程池的学习
  8. hdu2488 dfs
  9. Python学习笔记整理(四)Python中的字符串..
  10. scp的使用
  11. 采药 NOIP 2005 普及组
  12. NFV、DPDK以及部分用户态协议研究
  13. Rails在MacOS上搭建Heroku部署环境
  14. [转] 浅谈session,cookie,sessionStorage,localStorage的区别及应用场景
  15. Keepalived+Nginx+tomcat实现系统的高可用
  16. jenkins构建docker镜像上传到harbor并发布到kubernetes
  17. 002.SSH日常命令
  18. Django分别使用Memcached和Redis作为缓存的配置(Linux环境)
  19. C#使用Pechkin与CPechkin生成PDF
  20. 《Algorithms算法》笔记:元素排序(1)——简单排序

热门文章

  1. 【noi 2.6_9271】奶牛散步(DP)
  2. POJ 2594 Treasure Exploration 最小可相交路径覆盖
  3. AtCoder Beginner Contest 181 E - Transformable Teacher (贪心,二分)
  4. HDU 3416 Marriage Match IV (最短路径&amp;&amp;最大流)
  5. 2020牛客暑期多校训练营(第二场) F.Fake Maxpooling (单调队列)
  6. 详解Go语言I/O多路复用netpoller模型
  7. 洛谷P2241-统计方形-矩形内计算长方形和正方形的数量
  8. WebAR in Action
  9. macOS &amp; PostgreSQL
  10. git cli all in one