poj 1972

少人做的水题。直接模拟即可,不算dp题。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int a[10001][7];
int n;

int ok(int s,int t){
	int i=0;
	if(t==1)
	{
		i=max(a[s][2],i);
		i=max(a[s][3],i);
		i=max(a[s][4],i);
		i=max(a[s][5],i);
	}
	else
		if(t==2){
			i=max(a[s][1],i);
		i=max(a[s][3],i);
		i=max(a[s][6],i);
		i=max(a[s][5],i);
		}
		else
			if(t==3)
			{
				i=max(a[s][2],i);
		i=max(a[s][1],i);
		i=max(a[s][4],i);
		i=max(a[s][6],i);
			}
			else
				if(t==4)
				{
					i=max(a[s][1],i);
		i=max(a[s][3],i);
		i=max(a[s][6],i);
		i=max(a[s][5],i);
				}
				else
					if(t==5)
					{
						i=max(a[s][2],i);
		i=max(a[s][1],i);
		i=max(a[s][4],i);
		i=max(a[s][6],i);
					}
					else
						if(t==6){
							i=max(a[s][2],i);
		i=max(a[s][3],i);
		i=max(a[s][4],i);
		i=max(a[s][5],i);
						}

	return i;
}

			

void read(){
//	ifstream cin("in.txt");
	int i,j,k,s,t,ans;
	int K;
	cin>>K;
	while(K--)
	{
		cin>>n;
		ans=0;
		for(i=1;i<=n;i++)
			for(j=1;j<=6;j++)
				cin>>a[i][j];

		for(i=1;i<=6;i++)
		{
			t=ok(1,i);
			s=a[1][i];
			for(j=2;j<=n;j++)
			{
				for(k=1;k<=6;k++)
					if(a[j][k]==s)
						break;
				t+=ok(j,k);
				if(k==1)
					s=a[j][6];
				if(k==2)
					s=a[j][4];
				if(k==3)
					s=a[j][5];
				if(k==4)
					s=a[j][2];
				if(k==5)
					s=a[j][3];
				if(k==6)
					s=a[j][1];
			}
			ans=max(ans,t);
			if(ans==30)
				cout<<i<<endl;
		}
		cout<<ans<<endl;
	}
}

int main(){
	read();
	return 0;
}

posted on 2011-02-27 14:42  宇宙吾心  阅读(273)  评论(0编辑  收藏  举报

导航