加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

uva 10069 DP + 大数加法

发布时间:2020-12-14 02:41:53 所属栏目:大数据 来源:网络整理
导读:代码: #include iostream#include cstdio#include cstdlib#include algorithm#include cstring#include cmath#include stack#include vector#include queue#include map#include climits#include cassert#define LL long longusing namespace std;const int

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <map>
#include <climits>
#include <cassert>

#define LL long long

using namespace std;
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const double pi = 4 * atan(1.0);
const double ee = exp(1.0);

const int maxa = 10000 + 10;
const int maxb = 100 + 10;

char res[maxb],dp[maxa][maxb][maxb];
char s1[maxa],s2[maxb];

void add(char a[],char b[])
{
    int A[maxb],B[maxb],C[maxb];
    memset(res,sizeof(res));
    memset(A,sizeof(A));
    memset(B,sizeof(B));
    memset(C,sizeof(C));
    int lena = strlen(a);
    int lenb = strlen(b);
    int len;
    for (int i = 0; i < lena; i ++)
        A[lena - i - 1] = a[i] - '0';
    for (int i = 0; i < lenb; i ++)
        B[lenb - i - 1] = b[i] - '0';
    len = max(lena,lenb);
    for (int i = 0; i < len; i ++)
    {
        C[i] += A[i] + B[i];
        C[i + 1] += C[i] / 10;
        C[i] %= 10;
    }
    while (C[len] == 0 && len > 0)
        len --;
    for (int i = len; i >= 0; i --)
    {
        res[len - i] =  C[i] + '0';
    }
}

int main()
{
#ifdef LOCAL
    freopen("in.txt","r",stdin);
#endif // LOCAL
    int ncase;
    scanf("%d",&ncase);
    while (ncase--)
    {
        scanf("%s%s",s1,s2);
        int lena = strlen(s1);
        int lenb = strlen(s2);
        for (int i = 0; i < lena; i++)
            strcpy(dp[i][0],"1");
        for (int i = 1; i <= lena; i++)
        {
            for (int j = 1; j <= lenb; j++)
            {
                strcpy(dp[i][j],dp[i - 1][j]);
                if (s1[i - 1] == s2[j - 1])
                {
                    add(dp[i][j],dp[i - 1][j - 1]);
                    strcpy(dp[i][j],res);
                }
            }
        }
        printf("%sn",dp[lena][lenb]);
    }
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读