【uva】1352-Colored Cubes
2015-03-10 14:06
134 查看
#include<map> #include<string> #include<vector> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 30; const int maxd = 8; const int INF = 1111; int n,cnt; char cstr[maxn]; map<string,int>ColorList; //颜色结合 int Cub[maxd][maxd]; //初始状态 int CubList[maxn][maxd]; //姿态集合 int Num[maxd][maxn]; //第i个面的颜色为j的数目 int ret; void turn_left(int a[],int b[]){ b[1] = a[2];b[2] = a[6];b[3] = a[3]; b[4] = a[4];b[5] = a[1];b[6] = a[5]; } void turn_on(int a[],int b[]){ b[1] = a[4];b[2] = a[2];b[3] = a[1]; b[4] = a[6];b[5] = a[5];b[6] = a[3]; } void init(){ //------------------------------------- CubList[0][1] = 1; CubList[0][2] = 2; CubList[0][3] = 3; CubList[0][4] = 4; CubList[0][5] = 5; CubList[0][6] = 6; turn_left(CubList[0],CubList[1]); turn_left(CubList[1],CubList[2]); turn_left(CubList[2],CubList[3]); //------------------------------------- turn_on(CubList[0],CubList[4]); turn_left(CubList[4],CubList[5]); turn_left(CubList[5],CubList[6]); turn_left(CubList[6],CubList[7]); //-------------------------------------- turn_on(CubList[4],CubList[8]); turn_left(CubList[8],CubList[9]); turn_left(CubList[9],CubList[10]); turn_left(CubList[10],CubList[11]); //-------------------------------------- turn_on(CubList[8],CubList[12]); turn_left(CubList[12],CubList[13]); turn_left(CubList[13],CubList[14]); turn_left(CubList[14],CubList[15]); //-------------------------------------- turn_on(CubList[1],CubList[16]); turn_left(CubList[16],CubList[17]); turn_left(CubList[17],CubList[18]); turn_left(CubList[18],CubList[19]); //-------------------------------------- turn_on(CubList[3],CubList[20]); turn_left(CubList[20],CubList[21]); turn_left(CubList[21],CubList[22]); turn_left(CubList[22],CubList[23]); //-------------------------------------- } void debug(){ for(int i = 0; i < 24; i++){ for(int j = 1; j <= 6; j++){ printf("%d ,",CubList[i][j] - 1); } puts(""); } } void dfs(int v){ if(v == n){ int _ans = 0; for(int i = 1; i <= 6; i++){ int ans = 0; for(int j = 1; j <= cnt; j++){ ans = max(ans,Num[i][j]); } _ans += (n - ans); } ret = min(ret,_ans); return; } for(int i = 0; i < 24; i++){ Num[1][Cub[v][CubList[i][1]]]++; Num[2][Cub[v][CubList[i][2]]]++; Num[3][Cub[v][CubList[i][3]]]++; Num[4][Cub[v][CubList[i][4]]]++; Num[5][Cub[v][CubList[i][5]]]++; Num[6][Cub[v][CubList[i][6]]]++; dfs(v + 1); Num[1][Cub[v][CubList[i][1]]]--; Num[2][Cub[v][CubList[i][2]]]--; Num[3][Cub[v][CubList[i][3]]]--; Num[4][Cub[v][CubList[i][4]]]--; Num[5][Cub[v][CubList[i][5]]]--; Num[6][Cub[v][CubList[i][6]]]--; } } int main(){ init(); // debug(); while(scanf("%d",&n) && n){ ret = INF; // init: ColorList.clear(); cnt = 1; // input: for(int i = 0; i < n; i++) for(int j = 1; j <= 6; j++){ scanf("%s",cstr); string str(cstr); if(!ColorList[str]){ ColorList[str] = cnt ++; } Cub[i][j] = ColorList[str]; } memset(Num,0,sizeof(Num)); dfs(0); printf("%d\n",ret); } return 0; }
相关文章推荐
- UVA 1352 Colored Cubes(回溯)
- uva 1352 Colored Cubes(枚举)
- uva1352 - Colored Cubes 打表+暴力
- 【UVA1352】Colored Cubes
- uva 1352 - Colored Cubes(枚举)
- uva 1352 LA3401 - Colored Cubes(模拟,4级)
- Tokyo 2005 / UVa 1352 Colored Cubes (部分枚举&贪心)
- UVA 1352 Colored Cubes(暴力搜索枚举)
- uva 1352 LA3401 - Colored Cubes(模拟,4级)
- uva1352 Colored Cubes
- uva 1352 - Colored Cubes
- uva 1352 - Colored Cubes(枚举)
- Uva 1352 Colored Cubes 解题报告(枚举+码力)
- 1352 - Colored Cubes ---make
- UVA - 1352
- 1352 - Colored Cubes
- UVa-3401 Colored Cubes
- uvalive 3401 poj 2741 Colored Cubes
- 1352 - Colored Cubes (枚举方法)
- UVALIVE 3401 Colored Cubes