HDU4545(最长公共子序列)
来源:互联网 发布:excel单元格重复数据 编辑:程序博客网 时间:2024/06/07 03:33
题目很明显了,最长公共子序列。但是构建映射的时候我用了multimap结果超时。。。。。
直接用hash就好,因为范围不大,就26个字母。
还有一点要吐槽的是我把两个串的索引写反了 竟然提醒我RE而不是WA 结果一道水题优化了一下午。
我真是去年买了个表
#include<iostream> #include<cstdio> #include<algorithm> #include<string.h> using namespace std; int dp[1005][1005]; bool Hash[130][130]; int main(){ int T; scanf("%d",&T); for(int Case=1;Case<=T;Case++) { memset(Hash,0,sizeof(Hash)); char strx[1005],strm[1005]; scanf("%s%s",strx,strm); int m; scanf("%d",&m); for(int i=1;i<=m;i++) { char ch1[2],ch2[2]; scanf("%s%s",ch1,ch2); Hash[ch1[0]][ch2[0]]=1;}int lenx=strlen(strx),lenm=strlen(strm);for(int i=0;i<lenx;i++){for(int j=0;j<lenm;j++){if(strx[i]==strm[j]||Hash[strm[j]][strx[i]]){dp[i][j]=i-1<0||j-1<0?1:dp[i-1][j-1]+1;}else{int x1=i-1<0?0:dp[i-1][j];int x2=j-1<0?0:dp[i][j-1];dp[i][j]=max(x1,x2);}}}if(dp[lenx-1][lenm-1]==lenx) printf("Case #%d: happy\n",Case);else printf("Case #%d: unhappy\n",Case);}}
阅读全文
0 0
- HDU4545(最长公共子序列)
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 扩增子文献笔记2拟南芥根微生物组的结构和组成
- mysql sql优化和索引摘录
- 【每日一题-8】出栈入栈合法性与二进制中1的个数
- Android studio多渠道打包
- PAT程序设计考题——甲级1094(The largest generation) C++实现
- HDU4545(最长公共子序列)
- 网络基础 — 路由器的原理和作用
- Python标准库cPickle包如何使用?
- 正向代理与反向代理
- 我的第一天
- Android studio签名配置
- 给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=3 628 800,N!的末尾有两个0。
- 史上最详尽tablayout使用
- 图论中的NP问题