2013 ACM区域赛长沙 K Pocket Cube hdu 4801

题意:给了一个2*2的魔方..每步操作可以将任意一面翻转90度..现在问在N(<=7)步内.最多能翻出几面相同的.

直接打表模拟每种翻转情况

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std; int B[][]= { {,,,,,,,,,,,,,,,,,,,,,,,}, //ok
{,,,,,,,,,,,,,,,,,,,,,,,}, //ok
{,,,,,,,,,,,,,,,,,,,,,,,}, //ok
{,,,,,,,,,,,,,,,,,,,,,,,}, //ok
{,,,,,,,,,,,,,,,,,,,,,,,}, //ok
{,,,,,,,,,,,,,,,,,,,,,,,} //ok
};
int ans=;
void update(int *h) {
int sum=;
if (h[]==h[] && h[]==h[] && h[]==h[]) sum++;
if (h[]==h[] && h[]==h[] && h[]==h[]) sum++;
if (h[]==h[] && h[]==h[] && h[]==h[]) sum++;
if (h[]==h[] && h[]==h[] && h[]==h[]) sum++;
if (h[]==h[] && h[]==h[] && h[]==h[]) sum++;
if (h[]==h[] && h[]==h[] && h[]==h[]) sum++;
ans=max(ans,sum);
}
void dfs(int N,int *h) {
update(h);
if(N==) return;
int p[];
for(int i=; i<; i++) {
for(int j=; j<; j++) {
p[j]=h[B[i][j]];
}
dfs(N-,p);
}
return;
}
int main() {
int n;
while(~scanf("%d",&n)) {
int p[];
ans=;
for(int i=; i<; i++)
scanf("%d",&p[i]);
dfs(n,p);
printf("%d\n",ans);
}
}
上一篇:2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)


下一篇:一步一步开发sniffer(Winpcap+MFC)(一)工欲善其事,必先配环境——配置winpcap开发环境(图文并茂,非常清楚)