1 条题解
-
0
自动搬运
来自洛谷,原作者为

MloVtry
**搬运于
2025-08-24 21:57:50,当前版本为作者最后更新于2018-02-28 11:42:41,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
大力DP。 至少有3个数不同,那么我任选两个扔掉,剩下的一定需要不同。
还有位置是要对应的。
:表示第sta种情况下的剩余的五个数分别是的情况有没有被占用过。
,总共21种情况,大力转移即可。
代码
#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; }
- 1
信息
- ID
- 3188
- 时间
- 2000ms
- 内存
- 512MiB
- 难度
- 5
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者