1015 Accepted 332K 32MS C++ 1740B

本文介绍了一个通过动态规划算法解决最优陪审团选择的问题,旨在寻找一组陪审员,使得他们在辩护和控诉两方面的综合能力达到最佳平衡。算法通过多轮迭代,考虑每个候选人的贡献,并记录达到最佳状态的路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int f[21][1000];
int path[21][1000];
int p[201];
int d[201];
int ans[21];
int cmp(const void * e1,const  void *e2){
 
 int *p1=(int *)e1;
 int *p2=(int *)e2;
 return *p1-*p2;

}
int main()
{
 
  int n,m;
  int i,j,k;
  int t,u;
  int nCount=0;
  while(scanf("%d%d",&n,&m)){
           if(n==0&&m==0) break;
     nCount++;
     for(i=0;i<n;i++)
     scanf("%d%d",&p[i],&d[i]);
     memset(path,0,sizeof(path));
     memset(f,-1,sizeof(f));
     int PM=20*m;
     f[0][PM]=0;  // 0个候选人使得辩控差为PM 也就是0,辩控和为0;
    for(i=0;i<m;i++)
     for(j=0;j<=2*PM;j++)
      if(f[i][j]>=0){
       for(k=0;k<n;k++){  //因此最好计数从1开始
        if(f[i][j]+p[k]+d[k]>f[i+1][j+p[k]-d[k]]){
             t=i;
          u=j;
          while(t>0&&path[t][u]!=k){
           u-=(p[path[t][u]]-d[path[t][u]]);
            t--;
          }
          if(t==0){
                                    f[i+1][j+p[k]-d[k]]=f[i][j]+p[k]+d[k];
         path[i+1][j+p[k]-d[k]]=k;  
          }

          }
        }
      } 
      i=PM;
      j=0;
      while(f[m][i+j]<0&&f[m][i-j]<0)
       j++;
      if(f[m][i+j]>f[m][i-j])
       k=i+j;
      else
       k=i-j;
               printf("Jury #%d\n",nCount);
      printf("Best jury has value %d for prosecution and value %d for defence:\n",(f[m][k]+k-PM)/2,(f[m][k]+PM-k)/2);
               i=0;
      while(m>0){
                    ans[i]=path[m][k];
     k-=(p[path[m][k]]-d[path[m][k]]);
     m--;
     i++;
      }
              qsort(ans,i,sizeof(int),cmp);
                 for(j=0;j<i;j++)
      printf(" %d",ans[j]+1); //计数比编号大一
     printf("\n");

     }

 


 
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值