社区讨论
poj上AC,uva上wa了。
UVA323Jury Compromise参与者 1已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6yexnk
- 此快照首次捕获于
- 2025/11/20 12:51 4 个月前
- 此快照最后确认于
- 2025/11/20 12:51 4 个月前
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxx=430;
const int maxn=2e2+10;
int n,m,tot;
int dp[30][maxx*2],p[maxn],d[maxn],rec[30][maxx*2];
struct line
{
int to,next;
}edge[maxn*4*maxx];
void add1(int a1,int a2,int b)
{
edge[++tot].to=b;
edge[tot].next=rec[a1][a2];
rec[a1][a2]=tot;
}
void print(int now)
{
if(!now)return;
print(edge[now].next);
cout<<" "<<edge[now].to;
}
int main()
{
int cnt=0;
cin>>n>>m;
while(n!=0&&m!=0)
{
cnt++;
for(int i=1;i<=n;i++)cin>>p[i]>>d[i];
memset(dp,-0x3f,sizeof(dp));
memset(rec,0,sizeof(rec));
dp[0][maxx]=0;
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
for(int k=-400;k<=400;k++)
{
if(dp[j-1][k-(p[i]-d[i])+maxx]<0)continue;
if(dp[j-1][k-(p[i]-d[i])+maxx]+p[i]+d[i]>dp[j][k+maxx])
{
dp[j][k+maxx]=dp[j-1][k-(p[i]-d[i])+maxx]+p[i]+d[i];
rec[j][k+maxx]=rec[j-1][k-(p[i]-d[i])+maxx];
add1(j,k+maxx,i);
}
}
int ans=0,id=0,pp=0,dd=0;
for(int i=0;i<=400;i++)
{
ans=dp[m][maxx+i],id=i;
if(dp[m][maxx-i]>ans)id=-i,ans=dp[m][maxx-i];
if(ans>=0)break;
}
pp=(ans+id)/2;
dd=(ans-id)/2;
cout<<"Jury #"<<cnt<<endl;
cout<<"Best jury has value "<<pp<<" for prosecution and value "<<dd<<" for defence:"<<endl;
print(rec[m][id+maxx]);
cout<<endl;
cin>>n>>m;
}
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...