zoukankan      html  css  js  c++  java
  • 情况动态规划CodeForces Round #179 (296B) Yaroslav and Two Strings

    首先声明,我是一个菜鸟。一下文章中出现技术误导情况盖不负责

        直接求incomparable很杂复...反过来算..先算情况总数sum,和comparable的总数...sum-comparable=incomparable

           求comparable用动态规划....dp[a][b] .....b为0代表0~a..上下关系为全等的方法数..

                                                                         b为1代表0~a..面下的大于面下的方法数..

        每日一道理
    如果说生命是一座庄严的城堡,如果说生命是一株苍茂的大树,如果说生命是一只飞翔的海鸟。那么,信念就是那穹顶的梁柱,就是那深扎的树根,就是那扇动的翅膀。没有信念,生命的动力便荡然无存;没有信念,生命的美丽便杳然西去。(划线处可以换其他词语)

                                                                         b为2代表0~a..面下的小于面下的方法数..

        

        Program:

    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<cmath>
    #include<algorithm>
    #define ll long long
    #define oo (ll)1000000007
    using namespace std; 
    ll n,dp[2][3],sum;
    char s1[100005],s2[100005];
    int main()
    {
        //  freopen("input.txt","r",stdin);    freopen("output.txt","w",stdout);    
          int i,k,x,p1,p2;
          scanf("%I64d%s%s",&n,&s1,&s2); 
          memset(dp,0,sizeof(dp));
          k=0;
          sum=1;
          dp[0][0]=1;  // 0上上等    1上大下小    2上小下大 
          for (x=0;x<n;x++)
          {
                k=1-k;
                memset(dp[k],0,sizeof(dp[k]));
                if (s1[x]=='?')
                {
                      if (s2[x]=='?') 
                      {
                            sum=(sum*100)%oo;
                            dp[k][0]=(dp[1-k][0]*10)%oo;
                            dp[k][1]=(dp[1-k][0]*45+dp[1-k][1]*55)%oo;
                            dp[k][2]=(dp[1-k][0]*45+dp[1-k][2]*55)%oo;
                      }else
                      {
                            sum=(sum*10)%oo;
                            p2=s2[x]-'0';
                            dp[k][0]=dp[1-k][0];
                            dp[k][2]=(dp[1-k][0]*p2+dp[1-k][2]*(p2+1))%oo;
                            p2=9-p2;
                            dp[k][1]=(dp[1-k][0]*p2+dp[1-k][1]*(p2+1))%oo;
                      }
                }else
                if (s2[x]=='?')
                {
                      sum=(sum*10)%oo;
                      p1=s1[x]-'0';
                      dp[k][0]=dp[1-k][0];
                      dp[k][1]=(dp[1-k][0]*p1+dp[1-k][1]*(p1+1))%oo;
                      p1=9-p1;                  
                      dp[k][2]=(dp[1-k][0]*p1+dp[1-k][2]*(p1+1))%oo;
                }
                else
                {
                      if (s1[x]==s2[x])
                      {
                            dp[k][0]=dp[1-k][0];
                            dp[k][1]=dp[1-k][1];
                            dp[k][2]=dp[1-k][2];
                      }else
                      if (s1[x]>s2[x])  dp[k][1]=(dp[1-k][0]+dp[1-k][1])%oo;
                       else     dp[k][2]=(dp[1-k][0]+dp[1-k][2])%oo;
                }   
          } 
          sum=(3*oo+sum-dp[k][0]-dp[k][1]-dp[k][2])%oo;
          printf("%I64d\n",sum);
          return 0;
    }

        

    文章结束给大家分享下程序员的一些笑话语录: Google事件并不像国内主流媒体普遍误导的那样,它仅仅是中国Z府和美国公司、中国文化和美国文化甚至中国人和美国人之间的关系,是民族主义和帝国主义之间的关系;更重要的是,它就是Z府和公司之间的关系,是权力管制和市场自由之间的关系。从这个意义上说,过度管制下的受害者,主要是国内的企业。Google可以抽身而去,国内的企业只能祈望特区。www.ishuo.cn

  • 相关阅读:
    [转]relative、absolute和float
    CSS 布局属性(display,float,clear,visibility,overflow,overflow-x,overflow-y)
    CSS 块状元素和内联元素
    CSS定位
    CSS实例
    jQuery简单实例
    [转]几种常见SQL分页方式
    MyBatis Mapper XML 文件
    MyBatis XML 映射配置文件
    MyBatis 入门
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3034480.html
Copyright © 2011-2022 走看看