博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
uva 10069
阅读量:5012 次
发布时间:2019-06-12

本文共 1492 字,大约阅读时间需要 4 分钟。

简单的dp 但是一个大数加法  套用了末位大牛的类模板

#include 
#include
#include
#define maxs 10005#define maxn 110using namespace std;char X[maxs], Z[maxn];struct bign{ int len, s[maxn]; bign operator = (const char *num) { len = strlen(num); for (int i = 0; i < len; i++) s[i] = num[len-i-1]-'0'; return *this; } bign operator + (const bign &b) const { bign c; c.len = 0; for (int i = 0, g = 0; g || i < max(len, b.len); i++) { int x = g; if (i < len) x += s[i]; if (i < b.len) x += b.s[i]; c.s[c.len++] = x%10; g = x/10; } return c; } bign operator += (const bign &b) { *this = *this + b; return *this; } void print() { for (int i = len-1; i >= 0; i--) printf("%d", s[i]); }};bign dp[maxn][maxs];int main(){ int T; scanf("%d", &T); while (T--) { scanf("%s%s", X+1, Z+1); int len1 = strlen(X+1), len2 = strlen(Z+1); for (int i = 0; i <= len1; i++) dp[0][i] = "1"; for (int i = 1; i <= len2; i++) for (int j = i; j <= len1; j++) { dp[i][j] = dp[i][j-1]; if (Z[i] == X[j]) dp[i][j] += dp[i-1][j-1]; } dp[len2][len1].print();//printf("%d",dp[len2][len1]); puts(""); } return 0;}

转载于:https://www.cnblogs.com/avema/p/3774344.html

你可能感兴趣的文章
年终总结
查看>>
初创互联网公司技术架构变迁之路
查看>>
【BZOJ 3676】 3676: [Apio2014]回文串 (SAM+Manacher+倍增)
查看>>
【网络流24题】No. 13 星际转移问题 (网络判定 最大流)
查看>>
解析$.grep()源码及透过$.grep()看(两次取反)!!的作用
查看>>
[模板] 字符串hash
查看>>
SGU438_The Glorious Karlutka River =)
查看>>
Linux集群及LVS简介
查看>>
简单几何(直线与圆的交点) ZOJ Collision 3728
查看>>
Codeforces Round #327 (Div. 2)
查看>>
如何解决Provisional headers are shown问题(转)
查看>>
开发网站遇到的bug
查看>>
实现简单的接口自动化测试平台
查看>>
EXCEL工作表合并
查看>>
Prime Path
查看>>
ODAC(V9.5.15) 学习笔记(三)TOraSession(2)
查看>>
单纯形法
查看>>
SQL中的replace函数
查看>>
java中的类型安全问题-Type safety: Unchecked cast from Object to ...
查看>>
如何解决最后一个尾注引用显示与致谢混为一谈的问题-下
查看>>