uva10118
sshwy
2018-04-13 13:17:51
```cpp
#include<iostream>
//#define max(x1,x2) (x1>x2?x1:x2)
//#define t(w,x,y,z) (n*4-w-x-y-z-f[w][x][y][z])
using namespace std;
int n,a[45],b[45],c[45],d[45],mx;
int f[45][45][45][45];
int t(int w,int x,int y,int z){
return (n*4-w-x-y-z-f[w][x][y][z]);
}
int main(){
while(cin>>n){
if(!n)return 0;
for(int i=n;i>=1;i--)cin>>a[i]>>b[i]>>c[i]>>d[i];
mx=0;
a[n+1]=-2,b[n+1]=-3,c[n+1]=-4,d[n+1]=-5;
for(int i=n;i>=0;i--){
for(int j=n;j>=0;j--){
for(int k=n;k>=0;k--){
for(int l=n;l>=0;l--){
f[i][j][k][l]=0;
if(a[i+1]==b[j+1]&&t(i+1,j+1,k,l)<=3)f[i][j][k][l]=max(f[i][j][k][l],f[i+1][j+1][k][l]+2);
if(a[i+1]==c[k+1]&&t(i+1,j,k+1,l)<=3)f[i][j][k][l]=max(f[i][j][k][l],f[i+1][j][k+1][l]+2);
if(a[i+1]==d[l+1]&&t(i+1,j,k,l+1)<=3)f[i][j][k][l]=max(f[i][j][k][l],f[i+1][j][k][l+1]+2);
if(b[j+1]==c[k+1]&&t(i,j+1,k+1,l)<=3)f[i][j][k][l]=max(f[i][j][k][l],f[i][j+1][k+1][l]+2);
if(b[j+1]==d[l+1]&&t(i,j+1,k,l+1)<=3)f[i][j][k][l]=max(f[i][j][k][l],f[i][j+1][k][l+1]+2);
if(c[k+1]==d[l+1]&&t(i,j,k+1,l+1)<=3)f[i][j][k][l]=max(f[i][j][k][l],f[i][j][k+1][l+1]+2);
if(f[i][j][k][l]>mx)mx=f[i][j][k][l];
}
}
}
}
cout<<mx<<endl;
}
return 0;
}
``````cpp
#include<iostream>
using namespace std;
int n,c[5][50];
int t[45][45][45[45],g[45][45][45][45];
int main(){
while(cin>>n){
if(!n)return 0;
for(int i=n;i>=1;i--){
for(int j=1;j<=4;j++)cin>>c[j][i];
}
t[n][n][n][n]=g[n][n][n][n]=0;
for(int i1=n;i1>=1;i1--){
for(int i2=n;i2>=1;i2--){
for(int i3=n;i3>=1;i3--){
for(int i4=n;i4>=1;i4--){
/*t[i1][i2][i3][i4]
g[i1][i2][i3][i4]
c[1][i1]
c[2][i2]
c[3][i3]
c[4][i4]*/
}
}
}
}
}
return 0;
}
```