URAL1501. Sense of Beauty(记忆化)
2013-09-20 11:58
288 查看
链接
dfs+记忆化 对于当前状态虽然满足和差 但如果搜下去没有满足的情况也是不可以的 所以需要记忆化下
View Code
dfs+记忆化 对于当前状态虽然满足和差 但如果搜下去没有满足的情况也是不可以的 所以需要记忆化下
#include <iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<stdlib.h> using namespace std; char s1[1010],s2[1010]; int dp[1010][1010]; int sum1,sum2; int p[2010],n,flag; int ss1[1010],ss2[1010]; int st1[1010],st2[1010]; int dfs(int x,int y,int v,int o) { if(flag) return 1; if(dp[x][y]==2) return 2; if(o==1) p[v] = 1; else p[v] = 2; int i; if(v==2*n) { for(i = 1; i <= 2*n ; i++) printf("%d",p[i]); puts(""); flag = 1; return 1; } if(y<n&&abs((ss1[x]+ss2[y+1])-(st1[x]+st2[y+1]))<=1) { if(dfs(x,y+1,v+1,2)==1) return dp[x][y+1] = 1; else dp[x][y+1] = 2; } if(x<n&&abs((ss1[x+1]+ss2[y])-(st1[x+1]+st2[y]))<=1) { if(dfs(x+1,y,v+1,1)==1) return dp[x+1][y] = 1; else dp[x+1][y] = 2; } } int main() { int i,j,k; scanf("%d",&n); scanf("%s%s",s1,s2); ss1[0]=0,ss2[0]=0;st1[0] = 0;st2[0]=0; for(i = 0 ; i < n ; i++) if(s1[i]=='1') { ss1[i+1] = ss1[i]+1; st1[i+1] = st1[i]; } else { st1[i+1] = st1[i]+1; ss1[i+1] = ss1[i]; } for(i =0 ; i < n ; i++) if(s2[i]=='1') { ss2[i+1] = ss2[i]+1; st2[i+1] = st2[i]; } else { st2[i+1] = st2[i]+1; ss2[i+1] = ss2[i]; } dfs(1,0,1,1); if(!flag) dfs(0,1,1,2); if(!flag) printf("Impossible\n"); return 0; }
View Code
相关文章推荐
- URAL 1501. Sense of Beauty(记忆化搜索)
- URAL 1501. Sense of Beauty(记忆化搜索 dfs)
- ural 1501. Sense of Beauty
- ural 1148 记忆化搜索
- URAL 1152 False Mirrors 搜索|记忆化搜索|状压
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
- ural1009 第一个动态规划(dp)题目 。。。似乎也可以用dfs+记忆化收索 解。。。
- ural1238. Folding(记忆化)
- URAL 1501 Sense of Beauty
- URAL 1152 False Mirrors(记忆化?搜索)
- URAL1501——DFS——Sense of Beauty
- CF - 764C. Timofey and a tree - 记忆化dfs判重/并查集
- Ural 1152 False Mirrors(状压DP)
- ural 1930 Ivan's Car(spfa)
- ural 1014. Product of Digits贪心
- ural 1033. Labyrinth dfs
- Simplicity is beauty
- ural- 2065 Different Sums
- URAL 1025. Democracy in danger
- POJ 3252 Round Numbers <数位dp(记忆化所搜)/组合数学>