ural 1501. Sense of Beauty
2012-08-22 21:04
162 查看
http://acm.timus.ru/problem.aspx?space=1&num=1501
dp+记忆话搜索
给你两个长度为n的0 1 串
总和有n个0 和n个1
求一个新串 要求任意前i项 0的个数 和1的个数 差不能超过1
ans[i][j] 表示要想到第一个串的第i个 第二个串的第j个时 上一个应选那个串的字符 0代表无法选 即无答案
sum[i][j] 表示对应ans 的和(-1表示‘0’ 1 表示‘1’ )这样它的绝对值不超过1就行了
代码:
dp+记忆话搜索
给你两个长度为n的0 1 串
总和有n个0 和n个1
求一个新串 要求任意前i项 0的个数 和1的个数 差不能超过1
ans[i][j] 表示要想到第一个串的第i个 第二个串的第j个时 上一个应选那个串的字符 0代表无法选 即无答案
sum[i][j] 表示对应ans 的和(-1表示‘0’ 1 表示‘1’ )这样它的绝对值不超过1就行了
代码:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<string> #include<vector> #include<set> #include<queue> #include<stack> #include<cmath> #define LL long long using namespace std; const int N=1005; int ans ; int sum ; int an[N*2]; char a ,b ; int dp(int i,int j) { if(ans[i][j]!=-1) return ans[i][j]; if(i==0)//特殊情况 { if(dp(i,j-1)&&abs(b[j-1]+sum[i][j-1])<=1) {ans[i][j]=2;sum[i][j]=b[j-1]+sum[i][j-1];} else ans[i][j]=0; return ans[i][j]; } if(j==0)//特殊情况 { if(dp(i-1,j)&&abs(a[i-1]+sum[i-1][j])<=1) {ans[i][j]=1;sum[i][j]=a[i-1]+sum[i-1][j];} else ans[i][j]=0; return ans[i][j]; } if(dp(i,j-1)&&abs(b[j-1]+sum[i][j-1])<=1) {ans[i][j]=2;sum[i][j]=b[j-1]+sum[i][j-1];} else if(dp(i-1,j)&&abs(a[i-1]+sum[i-1][j])<=1) {ans[i][j]=1;sum[i][j]=a[i-1]+sum[i-1][j];} else ans[i][j]=0; return ans[i][j]; } int main() { //freopen("data","r",stdin); int n; while(scanf("%d",&n)!=EOF) { getchar(); gets(a); gets(b); for(int i=0;i<n;++i) { a[i]=(a[i]=='0')? -1:1; b[i]=(b[i]=='0')? -1:1; } memset(ans,-1,sizeof(ans)); ans[0][0]=3;//初始化 边界 sum[0][0]=0;//初始化 边界 dp(n,n); if(ans ==0) printf("Impossible\n"); else { int l1=n,l2=n; for(int i=2*n-1;i>=0;--i) { an[i]=ans[l1][l2];//逐步倒退求答案 if(ans[l1][l2]==1) --l1; else --l2; } for(int i=0;i<2*n;++i) printf("%d",an[i]); printf("\n"); } } return 0; }
相关文章推荐
- URAL1501. Sense of Beauty(记忆化)
- URAL 1501. Sense of Beauty(记忆化搜索 dfs)
- URAL 1501. Sense of Beauty(记忆化搜索)
- 记忆化搜索(DFS+DP) URAL 1501 Sense of Beauty
- URAL 1501 Sense of Beauty
- URAL1501——DFS——Sense of Beauty
- URAL 1409. Two Gangsters
- URAL 1787. Turn for MEGA
- 【后缀数组|最长回文子串】URAL-1297 Palindrome
- ural 1297 Palindrome(Manacher模板题)
- URAL-1329 Galactic History
- URAL1076.Trash(垃圾)——最佳匹配
- URAL 1960 Palindromes and Super Abilities (Palindromic Tree)
- [ural1519]Formula 1 && 插头DP(括号表示法)
- URAL - 1796 Amusement Park(水)
- ZOJ 3872 Beauty of Array(数学)
- ZOJ 3872 Beauty of Array(数学啊)
- The Beauty of DirectX 11 --- constant buffer, buffered/structure buffer
- URAL1017——DP——Staircases
- DP+路径 URAL 1029 Ministry