uva531
来源:互联网 发布:淘宝商店如何开通花呗 编辑:程序博客网 时间:2024/06/05 02:31
题目大意:
两个政治家说出自己想要的,然后找出他们最长的公共的序列。
思路:
最长公共子序列
整体没有弄一个循环WA了好多次。。
代码:
#include <iostream>using namespace std;#include <cstring>#include <stdio.h>char s1[105][105],s2[1055][105];int dp[105][105];int save[105][105];int sum;void print(int i,int j) { if(i < 0 || j < 0 ) return; if(save[i][j] == 2) { print(i - 1,j - 1); printf("%s",s1[i - 1]); if(--sum) printf(" "); else printf("\n"); } if(save[i][j] == 1) print(i - 1,j); if(save[i][j] == -1) print(i,j - 1);}int main() { while(true) { int i = 0,j = 0; int state = 0; while(true){ state = scanf("%s",s1[i]); if(state == -1) break; if(s1[i][0] == '#') break; else i++; } if(state == -1) //一定要有 不然会TLE return 0; while(scanf("%s",s2[j])) { if(s2[j][0] == '#') break; else j++; } memset(dp,0,sizeof(dp)); memset(save,0,sizeof(save)); int m = 0; for(int k = 1; k <= i; k++) { for(int p = 1;p <= j ; p++) { if(strcmp(s1[k - 1],s2[p - 1]) == 0) { dp[k][p] = dp[k - 1][p - 1] + 1; //strcpy(save[m++],s1[k - 1]); save[k][p] = 2; // printf("%d ",save[k][p]); } else { if(dp[k - 1][p] > dp[k][p - 1]) { dp[k][p] = dp[k - 1][p]; save[k][p] = 1; } else { dp[k][p] = dp[k][p - 1]; save[k][p] = -1; } } } } //cout << save[i - 1][j - 1]<<endl; sum = dp[i][j]; if(sum != 0) print(i,j); /*for(int k = 0; k < i; k++) //printf("%s ",save[k]); if(save[k]) printf("%s ",s1[k]);*/ //printf("%s\n",save[m - 1]); } return 0;}
0 0
- uva531
- uva531
- uva531
- UVA531- Compromise
- [动态规划]UVA531 - Compromise
- [LCS]Uva531 Compromise
- uva531 - Compromise(动规,lcs)
- uva531- Compromise(lcs+打印路径)
- UVA531字符串版最长公共子序列,并输出
- codeforces-372A
- android WebView 使用总结
- 【Android】基于Service组件的简易音乐播放器
- js打开新页面
- Appium(JAVA)Windows 7系统搭建及示例运行
- uva531
- JAVA 后台计算 经纬度 最短距离
- ThreadLocal可能引起的内存泄露
- 如何选择前端框架?
- 廖雪峰python教程
- Oracle定义DES加密解密及MD5加密函数示例
- Chewbaсca and Number
- Antimatter Ray Clearcutting uva11008
- Minimum Depth of Binary Tree