普及- 题目 95分 求助大佬
查看原帖
普及- 题目 95分 求助大佬
246331
mystic_qwq楼主2023/11/18 00:27

record: WA on #19

min(a,b){return a<b?a:b;}
t[5][11],f[1<<5][25+1],len[5],ans[5];
/*print(x){
  char n[5];
  for(int i=0;i<5;++i)
    n[i]=x&1,x>>=1;
  for(int i=4;~i;--i)
    putchar(n[i]^48);
}*/
void dfs(st,dis){
  int one=__builtin_popcount(st);
  //print(st),printf(" pop(st)=%d dis=%d\n",one,dis);
  if(one^4){
    for(int i=0;i<5;++i){
      if(!(st&(1<<i))){
        for(int d=1;d<=10&&5-one-1<=25-dis-d&&25-dis-d<=(5-one-1)*10;++d)
          if(f[st|(1<<i)][dis+d]>f[st][dis]+t[i][d]){
            f[st|(1<<i)][dis+d]=f[st][dis]+t[i][d];
            len[i]=d,dfs(st|(1<<i),dis+d);
          }
      }
    }
  }
  else{
    for(int i=0;i<5;++i)
      if(!(st&(1<<i))){
        if(f[0B11111][25]>f[st][dis]+t[i][25-dis]){
          f[0B11111][25]=f[st][dis]+t[i][25-dis];
          len[4]=25-dis;for(int i=0;i<5;++i)ans[i]=len[i];
        }
        return;
      }
  }
}
main(){
  for(int i=0;i<5;++i)
    for(int j=1;j<=10;++j)
      scanf("%d",t[i]+j);
  memset(f,127,sizeof(f)),*f[0]=0,dfs(0,0);
  printf("%d\n",f[0B11111][25]);
  printf("%d %d %d %d %d",*ans,ans[1],ans[2],ans[3],ans[4]);
}

2023/11/18 00:27
加载中...