题解 P4222 【[CQOI2012]编号】

· · 题解

大力DP。 至少有3个数不同,那么我任选两个扔掉,剩下的一定需要不同。

还有位置是要对应的。

$C_7^2=21$,总共21种情况,大力转移即可。 代码 ```cpp #include<bits/stdc++.h> using namespace std; int f[25][20][20][20][20][20],n; void put(int i,int j,int a,int b,int c,int d,int e) { // cout<<i<<" "<<j<<" "<<a<<" "<<b<<" "<<c<<" "<<d<<" "<<e<<endl; putchar(i<10?i+'0':'a'+i-10); putchar(j<10?j+'0':'a'+j-10); putchar(a<10?a+'0':'a'+a-10); putchar(b<10?b+'0':'a'+b-10); putchar(c<10?c+'0':'a'+c-10); putchar(d<10?d+'0':'a'+d-10); putchar(e<10?e+'0':'a'+e-10); } int main() { scanf("%d",&n); for(int i=0;i<16;++i) for(int j=0;j<16;++j) for(int a=0;a<16;++a) for(int b=0;b<16;++b) for(int c=0;c<16;++c) for(int d=0;d<16;++d) for(int e=0;e<16;++e) { if(!f[1][a][b][c][d][e]&&!f[2][j][b][c][d][e]&&!f[3][j][a][c][d][e]&& !f[4][j][a][b][d][e]&&!f[5][j][a][b][c][e]&&!f[6][j][a][b][c][d]&& !f[7][i][b][c][d][e]&&!f[8][i][a][c][d][e]&&!f[9][i][a][b][d][e]&& !f[10][i][a][b][c][e]&&!f[11][i][a][b][c][d]&&!f[12][i][j][c][d][e]&& !f[13][i][j][b][d][e]&&!f[14][i][j][b][c][e]&&!f[15][i][j][b][c][d]&& !f[16][i][j][a][d][e]&&!f[17][i][j][a][c][e]&&!f[18][i][j][a][c][d]&& !f[19][i][j][a][b][e]&&!f[20][i][j][a][b][d]&&!f[21][i][j][a][b][c]) { n--; if(!n) { put(i,j,a,b,c,d,e);return 0; } f[1][a][b][c][d][e]=f[2][j][b][c][d][e]=f[3][j][a][c][d][e]= f[4][j][a][b][d][e]=f[5][j][a][b][c][e]=f[6][j][a][b][c][d]= f[7][i][b][c][d][e]=f[8][i][a][c][d][e]=f[9][i][a][b][d][e]= f[10][i][a][b][c][e]=f[11][i][a][b][c][d]=f[12][i][j][c][d][e]= f[13][i][j][b][d][e]=f[14][i][j][b][c][e]=f[15][i][j][b][c][d]= f[16][i][j][a][d][e]=f[17][i][j][a][c][e]=f[18][i][j][a][c][d]= f[19][i][j][a][b][e]=f[20][i][j][a][b][d]=f[21][i][j][a][b][c]=1; } } return 0; } ```