UVA 10651 Pebble Solitaire 状压Dp
2014-07-12 16:57
316 查看
#include <map> #include <set> #include <list> #include <cmath> #include<cctype> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cstdio> #include <string> #include <vector> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define PI 3.1415926535897932626 using namespace std; int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);} #define MAXN 4100 int dp[MAXN]; int G[13]; char str[13]; int calcu(int n) { if (dp !=-1) return dp ; dp =0; for (int i=0;i<12;i++) if (n&(1<<i)) dp ++; for (int i=0;i<10;i++) { int tmp; if ((n&(1<<i))&& (n&(1<<(i+1))) && !(n&(1<<(i+2)))) { tmp=n; tmp|=(1<<(i+2)); tmp&=~(1<<i); tmp&=~(1<<(i+1)); dp =min(dp ,calcu(tmp)); } if (!(n&(1<<i)) && (n&(1<<(i+1))) && (n&(1<<(i+2)))) { tmp=n; tmp|=(1<<i); tmp&=~(1<<(i+2)); tmp&=~(1<<(i+1)); dp =min(dp ,calcu(tmp)); } } return dp ; } int main() { //freopen("sample.txt","r",stdin); int T; memset(dp,-1,sizeof(dp)); scanf("%d",&T); for (int i=0;i<MAXN;i++) calcu(i); while (T--) { scanf("%s",str); int n=0; for (int i=0;i<12;i++) if (str[i]=='o') n|=(1<<i); printf("%d\n",dp ); } return 0; }
相关文章推荐
- UVa 10651 Pebble Solitaire(状压DP)
- UVa 10651 Pebble Solitaire(状态压缩DP)
- UVa 10651 Pebble Solitaire (DP&bitset)
- UVa 10651 Pebble Solitaire(DP 记忆化搜索)
- uva_10651_Pebble Solitaire(状态压缩DP)
- UVa 10651 Pebble Solitaire(状态压缩DP)
- UVA 10651 Pebble Solitaire 状态压缩dp
- uva 10651- Pebble Solitaire(状态压缩DP)待看。。。
- UVA 10651 Pebble Solitaire 状态压缩dp
- uva 10651 Pebble Solitaire(dp,状态压缩,记忆化搜索)
- UVa 10651 Pebble Solitaire (DP 卵石游戏 记忆化搜索)
- UVa 10651 Pebble Solitaire(DP 记忆化搜索)
- 【DP】UVA 10651 Pebble Solitaire 记忆化搜索
- [集合DP] UVA 10651 Pebble Solitaire
- 【DP】UVA 10651 Pebble Solitaire 记忆化搜索
- UVa 10651 Pebble Solitaire(状态压缩DP)
- UVa 10651 - Pebble Solitaire 状态压缩 dp
- UVa 10651 - Pebble Solitaire 状态压缩 dp
- UVA 10651 Pebble Solitaire(记忆化)
- UVA 10651 Pebble Solitaire