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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |