zoukankan      html  css  js  c++  java
  • URAL1501. Sense of Beauty(记忆化)

    链接

    dfs+记忆化 对于当前状态虽然满足和差 但如果搜下去没有满足的情况也是不可以的 所以需要记忆化下

     1 #include <iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<stdlib.h>
     6 using namespace std;
     7 char s1[1010],s2[1010];
     8 int dp[1010][1010];
     9 int sum1,sum2;
    10 int p[2010],n,flag;
    11 int ss1[1010],ss2[1010];
    12 int st1[1010],st2[1010];
    13 int dfs(int x,int y,int v,int o)
    14 {
    15     if(flag)
    16     return 1;
    17     if(dp[x][y]==2)
    18     return 2;
    19     if(o==1)
    20         p[v] = 1;
    21     else
    22         p[v] = 2;
    23     int i;
    24     if(v==2*n)
    25     {
    26         for(i = 1; i <= 2*n ; i++)
    27         printf("%d",p[i]);
    28         puts("");
    29         flag = 1;
    30         return 1;
    31     }
    32     if(y<n&&abs((ss1[x]+ss2[y+1])-(st1[x]+st2[y+1]))<=1)
    33     {
    34 
    35         if(dfs(x,y+1,v+1,2)==1)
    36         return dp[x][y+1] = 1;
    37         else
    38         dp[x][y+1] = 2;
    39     }
    40     if(x<n&&abs((ss1[x+1]+ss2[y])-(st1[x+1]+st2[y]))<=1)
    41     {
    42         if(dfs(x+1,y,v+1,1)==1)
    43         return dp[x+1][y] = 1;
    44         else
    45         dp[x+1][y] = 2;
    46     }
    47 }
    48 int main()
    49 {
    50     int i,j,k;
    51     scanf("%d",&n);
    52     scanf("%s%s",s1,s2);
    53     ss1[0]=0,ss2[0]=0;st1[0] = 0;st2[0]=0;
    54     for(i = 0 ; i < n ; i++)
    55     if(s1[i]=='1')
    56     {
    57         ss1[i+1] = ss1[i]+1;
    58         st1[i+1] = st1[i];
    59     }
    60     else
    61     {
    62         st1[i+1] = st1[i]+1;
    63         ss1[i+1] = ss1[i];
    64     }
    65     for(i =0  ; i < n ; i++)
    66     if(s2[i]=='1')
    67     {
    68         ss2[i+1] = ss2[i]+1;
    69         st2[i+1] = st2[i];
    70     }
    71     else
    72     {
    73         st2[i+1] = st2[i]+1;
    74         ss2[i+1] = ss2[i];
    75     }
    76     dfs(1,0,1,1);
    77     if(!flag)
    78     dfs(0,1,1,2);
    79     if(!flag)
    80     printf("Impossible
    ");
    81     return 0;
    82 }
    View Code
  • 相关阅读:
    linux初学者-ftp篇(一)
    随机密码生成
    倒计时问题java
    百钱买鸡
    去7JAVA
    贪吃蛇Controller Java实现(二)
    贪吃蛇Global Java实现(二)
    贪吃蛇GamePanel Java实现(二)
    贪吃蛇Listener Java实现(二)
    贪吃蛇snake Java实现(二)
  • 原文地址:https://www.cnblogs.com/shangyu/p/3330302.html
Copyright © 2011-2022 走看看