1777求调
  • 板块灌水区
  • 楼主2018090807L
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/9/12 22:10
  • 上次更新2023/10/27 11:46:39
查看原帖
1777求调
236243
2018090807L楼主2022/9/12 22:10

60ptsWA(别管那个TLE,常数问题)

P1777

#include<bits/stdc++.h>
using namespace std;
int n,k,S=0,T=0;
int f[105][105][257][10],h[105];
int calc(int x,int y){
	int u=y-x;
	int sum=0;
	while(u){
		u^=(u&(-u));
		sum++;
	}return sum;
}
int main(){
	while(1){
		int res=999999999,S=0;
		T++;
		scanf("%d%d",&n,&k);
		if(n==0&&k==0){
			break;
		}memset(f,0x3f,sizeof(f));
		for(int i=1;i<=n;i++){
			scanf("%d",&h[i]);
			h[i]=h[i]-25;
			S=S|(1<<h[i]);
		}f[1][0][1<<h[1]][h[1]]=1;
		for(int i=2;i<=n;i++){
			for(int j=0;j<=k;j++){
				for(int l=0;l<=255;l++){
					for(int r=0;r<=8;r++){
						if(j)f[i][j][l][r]=min(f[i][j][l][r],f[i-1][j-1][l][r]);
					}for(int r=0;r<=8;r++){
						f[i][j][l|1<<h[i]][h[i]]=min(f[i][j][l|1<<h[i]][h[i]],f[i-1][j][l][r]+(r!=h[i]));	
					}
				}
			}
		}for(int l=0;l<=255;l++){
			for(int r=0;r<=8;r++){
				res=min(res,f[n][k][l][r]+calc(l,S));
			}
		}
		printf("Case %d: %d\n\n",T,res);
	}
	return 0;
}
2022/9/12 22:10
加载中...