state:
dp[i] - minimum pebbles left when reaching state i
transition:
dp[i]=min(dp[k]), for all k is pre state of i
leaf nodes are those states can't move any more
/* UVas */ /*****************************************************************************/ int n, b; int d[1<<12]; string t; int dfs(int b) { int &r=d[b]; if (r!=-1) { return r; } else { r=INT_MAX; for (int i=0; i<12; i++) { if ((1<<i)&b) { if (((1<<(i-1))&b)&&!((1<<(i-2))&b)&&i>1) { int nb=b&~(1<<i); nb&=~(1<<(i-1)); nb|=1<<(i-2); r=min(r, dfs(nb)); } if (((1<<(i+1))&b)&&!((1<<(i+2))&b)&&i<10) { int nb=b&~(1<<i); nb&=~(1<<(i+1)); nb|=1<<(i+2); r=min(r, dfs(nb)); } } } int re=0; for (int i=0; i<12; i++) { if ((1<<i)&b) { re++; } } r=min(r, re); } return r; } int main(void) { cin>>n; cin.ignore(); while (n--) { getline(cin, t); b=0; for (int j=0; j<12; j++) { int m=11-j; b|=t[j]=='o'?1<<m:0<<m; } memset(d, -1, sizeof(d)); cout<<dfs(b)<<endl; } return 0; } /*****************************************************************************/
No comments :
Post a Comment