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; }