比赛 20140425 评测结果 AAWWWWWWWW
题目名称 积木游戏 最终得分 20
用户昵称 GDFRWMY 运行时间 0.023 s
代码语言 C++ 内存使用 0.43 MiB
提交时间 2014-04-25 09:54:04
显示代码纯文本
#include<fstream>
#include<cstring>
using namespace std;
ifstream fin("bricka.in");
ofstream fout("bricka.out");
int t,num,n,m,k,ans,o,l,r,f,xx,yy,d,e;
int xl[5000],yl[5000],map[100][100],v[5000],q[5000];
int main(){
	fin>>t;
	for(int y=0;y<t;y++){

		fin>>n>>m>>k;
		
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				fin>>map[i][j];
		
		ans=0;
		for (int i=1;i<=m;i++){
			memset(v,0,sizeof(v));
			memset(q,0,sizeof(q));
			o=0; num=0;l=r=1;
			q[1]=map[n][i];
			yl[1]=n;
			xl[1]=i;
			while (o<n*m-k){
				f=0;
				o++;
				for(int j=l;j<=r;j++)
					if (v[xl[j]+(yl[j]-1)*m]==0){
						//if (i==4)
						//fout<<q[j]<<' ';
						if (q[j]>f){
							f=q[j];
							d=xl[j]+(yl[j]-1)*m;
							e=j;
						}
				}
					//if (i==4)
						//fout<<endl;		
					v[d]=1;
					num=num+f;
                   xx=xl[e];
				   yy=yl[e];
				   //if (i==4)
					 //fout<<f<<' '<<xx<<' '<<yy<<' '<<(yy-2)<<' '<<n<<' '<<xx<<' '<<v[(yy-2)*n+xx]<<endl;
				   if (yy+1<=n)
					   if (v[yy*m+xx]==0) {
						   r++;
						   q[r]=map[yy+1][xx];
						   xl[r]=xx;
						   yl[r]=yy+1;
					   }
				   if (yy-1>0)
					   if (v[(yy-2)*m+xx]==0) {
						   r++;
						   q[r]=map[yy-1][xx];
						   xl[r]=xx;
						   yl[r]=yy-1;
					   }
				   if (xx+1<=m)
					   if (v[(yy-1)*m+xx+1]==0) {
						   r++;
						   q[r]=map[yy][xx+1];
						   xl[r]=xx+1;
						   yl[r]=yy;
					   }
				   if (xx-1>0)
					   if (v[(yy-1)*m+xx-1]==0) {
						   r++;
						   q[r]=map[yy][xx-1];
						   xl[r]=xx-1;
						   yl[r]=yy;
					   }	
			   
						   
			}
			if (num>ans)
				ans=num;
			//fout<<endl;
		}
		fout<<"Case "<<y+1<<':'<<ans<<endl;
	}
	return 0;
}