zoukankan      html  css  js  c++  java
  • uva10069 Distinct Subsequences(DP+大数)

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=11&page=show_problem&problem=1010

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cstdlib>
    #include <string>
    #include <algorithm>
    #define maxn 10000
    using namespace std;
    void reverse(string &ans,int ct){
        for(int i=0;i<ct/2;i++){
            swap(ans[i],ans[ct-1-i]);
        }
    }
    string mul(string a,string b){
        int la=a.length(),lb=b.length();
        string ans="";
        int c[maxn],ct=0,d[maxn];//c plus d num
        memset(d,0,sizeof d);
        reverse(a,la),reverse(b,lb);
        for(int i=0;i<lb;i++){
            memset(c,0,sizeof c);
            for(int j=0;j<la;j++){
                d[i+j]+=(b[i]-'0')*(a[j]-'0')+c[i+j];
                c[i+j+1]=d[i+j]/10;
                d[i+j]%=10;
            }
            if(c[i+la]) d[i+la]=c[i+la],ct=i+1+la;
            else ct=i+la;
        }
        int i=ct-1;
        //脠楼脟掳碌艗0
        while(i>=0&&d[i]==0) i--;
        if(i<0) ans="0";
        //
        else for(;i>=0;i--) ans+=d[i]+'0';
        return ans;
    }
    string add(string a,string b){
        int la=a.length(),lb=b.length();
        int c=0,ct;
        int d[maxn];
        string ans="";
        if(la>lb) swap(a,b),swap(la,lb);
        reverse(a,la),reverse(b,lb);
        for(int i=0;i<la;i++){
            d[i]=a[i]-'0'+b[i]-'0'+c;
            c=d[i]/10;
            d[i]%=10;
        }
        for(int i=la;i<lb;i++){
            d[i]=b[i]-'0'+c;
            c=d[i]/10;
            d[i]%=10;
        }
        if(c) d[lb]=c,ct=lb+1;
        else ct=lb;
        int i=ct-1;
        //脠楼脟掳碌艗0
        while(i>=0&&d[i]==0) i--;
        if(i<0) ans="0";
        //
        else for(;i>=0;i--) ans+=d[i]+'0';
        return ans;
    }
    string itoa(int x){
        string ans="";
        int ct=0;
        while(x){
            ans+=x%10+'0';
            x/=10,ct++;
        }
        reverse(ans,ct);
        return ans;
    }
    int t;
    char a[10010],b[110];
    string dp[10010][110];
    int main(){
        //freopen("10069","r",stdin);
        scanf("%d",&t);
        for(int ca=1;ca<=t;ca++){
            scanf("%s%s",a+1,b+1);
            int la=strlen(a+1),lb=strlen(b+1);
            for(int i=0;i<=la;i++){
               for(int j=0;j<=lb;j++){
                  dp[i][j]="0";
               }
            }
            for(int i=1;i<=la;i++){
               if(a[i]==b[1]) dp[i][1]=add(dp[i][1],"1");
               dp[i+1][1]=dp[i][1];
            }
            for(int i=2;i<=la;i++){
                for(int j=2;j<=lb;j++){
                   if(a[i]==b[j]){
                      dp[i][j]=add(dp[i][j],dp[i-1][j-1]);
                   }
                   dp[i+1][j]=add(dp[i+1][j],dp[i][j]);
                }
            }
            cout<<dp[la][lb]<<endl;
        }
        return 0;
    }
    uva10069
  • 相关阅读:
    Android 从零搭建简单MVP Demo
    Ubuntu 16.04 安装wine QQ
    Android 根据字符串动态获取资源ID
    Android 个推 踩坑小结
    Android Studio 查看手机CPU信息
    J2EE 项目本地发布路径及修改
    Cucumber 安装
    [译] 第三十天:Play Framework
    [译] 第二十九天:Yeoman Chrom Generator
    [译] 第二十八天:Java开发者的OpenShift Eclipse 集成
  • 原文地址:https://www.cnblogs.com/wonderzy/p/3541871.html
Copyright © 2011-2022 走看看