poj 1015(dp)
#include<iostream> #include<cstring> #include<algorithm> using namespace std; int n,m; int dp[21][801],path[21][801]; int p[201],d[201],s[201],v[201]; int id[21]; bool select(int j,int k,int i){ while(j>0&&path[j][k]!=i){ k -= v[path[j][k]]; j--; } return (j!=0)?true:false; } int main(){ int j,k,i,time=1; while(cin>>n>>m&&n!=0){ for(i=1;i<=n;i++){ cin>>p[i]>>d[i]; s[i] = p[i]+d[i]; v[i] = p[i]-d[i]; } memset(dp,-1,sizeof(dp)); memset(path,0,sizeof(path)); int fix = m*20; dp[0][fix] = 0; for(j=1;j<=m;j++){ for(k=0;k<=2*fix;k++){ if(dp[j-1][k]>=0){ for(i=1;i<=n;i++){ if(!select(j-1,k,i)){ if(dp[j][k+v[i]]<dp[j-1][k]+s[i]){ dp[j][k+v[i]] = dp[j-1][k]+s[i]; path[j][k+v[i]] = i; } } } } } } for(k=0;k<=2*fix;k++){ if(dp[m][fix-k]>=0||dp[m][fix+k]>=0){ break; } } int div = dp[m][fix-k]>dp[m][fix+k]?fix-k:fix+k; for(i=0,j=m,k=div;i<m;i++,j--){ id[i] = path[j][k]; k -= v[id[i]]; } sort(id,id+m); //Jury #1 //Best jury has value 6 for prosecution and value 4 for defence: // 2 3 cout<<"Jury #"<<time++<<endl; cout<<"Best jury has value "<<(dp[m][div]+div-fix)/2<<" for prosecution and value "<<(dp[m][div]-div+fix)/2<<" for defence:"<<endl; for(i=0;i<m;i++){ cout<<" "<<id[i]; } cout<<endl<<endl; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)