题解 P4222 【[CQOI2012]编号】
MloVtry
·
·
题解
大力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;
}
```