记录编号 126603 评测结果 WWWWWWWWWW
题目名称 993.[NOIP 2010冲刺三]宁采臣的书架 最终得分 0
用户昵称 Ezio 是否通过 未通过
代码语言 C++ 运行时间 0.001 s
提交时间 2014-10-13 20:36:21 内存使用 2.70 MiB
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <queue>
#include <map>
#include <vector>
#define scafn scanf
#define For(st,ed,i) for(int i=st;i<=ed;++i)
#define Fordown(st,ed,i) for(int i=st;i>=ed;--i)
#define start(a,flag) memset(a,flag,sizeof(a));
using namespace std;
typedef long long ll;typedef unsigned int uint;typedef unsigned long long ull;
const int INF=0x7f7f7f7f;
int b[111],d[2][111][1<<8][11],o[1<<8];
int main()
{
	freopen("arrangement1.in","r",stdin);
	freopen("arrangement.out","w",stdout);
	For(0,(1<<8)-1,i){
		o[i]=0;
		For(0,7,j)if(i&(1<<j))o[i]++;
	}
	int t=0,n,k;
	while(scanf("%d%d",&n,&k)!=EOF&&(n+k)){
		int S=0,h=0;
		For(1,n,i){
			scanf("%d",&b[i]);
			b[i]-=25;
			S=S|(1<<b[i]);
			h=max(h,b[i]);
		}++h;
		start(d[0],0x7f);
		d[0][0][(1<<b[1])][b[1]]=1;
		d[0][1][0][h]=0;
		int c=0,p=0;
		For(1,n,i){
			c=p^1;start(d[c],0x7f);
			For(0,k,j)For(0,S,s)For(0,h,l){
				if(d[p][j][s][l]==INF)continue;
				d[c][j][s|(1<<b[i+1])][b[i+1]]=min(d[c][j][s|(1<<b[i+1])][b[i+1]],d[p][j][s][l]+(b[i+1]==l?0:1));
				d[c][j+1][s][l]=min(d[c][j][s][l],d[p][j][s][l]);
			}p=c;
		}
		int ans=INF;
		For(0,k,j)For(0,S,s)For(0,h-1,l){
			if(d[c][j][s][l]==INF)continue;
			int z1=S^s;
			ans=min(ans,d[c][j][s][l]+o[z1]);
		}
		printf("Case %d: %d\n",++t,ans);
	}
	//system("pause");
	return 0;
}