Match for Bonus
2014-08-04 16:55
363 查看
【题目来源】多校2014 zoj1642
【题目含义】 题目给你每一个字母的价值,然后给你两个字符串a,b,如果a串第i个字符和b串第j个字符相同,则加上该字符的价值,如果不相等则什么也不做。
【题目分析】该题就是求字符串a和字符串b的最长公共子序列,只不过,在字符相同时不再是加1,而是加上该字符的价值。
【代码】
【题目含义】 题目给你每一个字母的价值,然后给你两个字符串a,b,如果a串第i个字符和b串第j个字符相同,则加上该字符的价值,如果不相等则什么也不做。
【题目分析】该题就是求字符串a和字符串b的最长公共子序列,只不过,在字符相同时不再是加1,而是加上该字符的价值。
【代码】
#include <iostream> #include <cstdio> #include <cstring> #define MAXN 10+2000 using namespace std; char a[MAXN],b[MAXN]; struct node{ char ch; int v; }t[MAXN]; int res[MAXN][MAXN]; void init() { for(int i = 0; i < MAXN; i++) res[0][i] = res[i][0] = 0; } int find(char ch) { int i = 1; while(t[i].ch != ch) i++; return t[i].v; } int main() { //freopen("in.txt","r",stdin); int n; init(); while(cin>>n){ getchar(); for(int i = 1; i <= n; i++){ t[i].ch=getchar(); getchar(); scanf("%d",&t[i].v); getchar(); } scanf("%s%s",a+1,b+1); int len_a = strlen(a+1); int len_b = strlen(b+1); for(int i = 1; i <= len_a; i++){ for(int j = 1; j <= len_b; j++){ if(a[i] == b[j]){ res[i][j] = res[i-1][j-1] + find(a[i]); } else{ res[i][j] = max(res[i][j-1],res[i-1][j]); } } } cout<<res[len_a][len_b]<<endl; } return 0; }
相关文章推荐
- ZOJ 1642 Match for Bonus(LCS)
- zoj 1642 Match for Bonus(动态规划)
- ZJU 1642 Match for Bonus
- zoj 1642 Match for Bonus[dp,lcs]
- zoj1642 Match for Bonus(DP)
- ZOJ 1642 Match for Bonus (DP)
- ZOJ 1642 Match for Bonus
- zoj 1642 Match for Bonus
- ZOJ 1642 Match for Bonus
- zoj1642——Match for Bonus
- zoj 1642 Match for Bonus
- ZOJ 1642 Match for Bonus
- ZOJ 1642 Match for Bonus
- zoj 1642 - Match for Bonus
- ZOJ 1642 Match for Bonus(dp)
- 子串数据ZOJ 1642 Match for Bonus
- Theme主题错误:Error retrieving parent for item: No resource found that matche
- The best overloaded method match for *** has some invalid
- Submitted credentials for token[***]did not match the expected credentials
- RE Match for Mac(AE色彩匹配插件)附RE Match注册码 v1.4.5破解版