ZOJ 1027
来源:互联网 发布:java swing 时间控件 编辑:程序博客网 时间:2024/05/17 09:31
又经典的DP题LCS改编
原来的LCS是求最长公共子序列
这里把长度换成了权重
- #include <cstdlib>
- #include <iostream>
- #include <cstdio>
- using namespace std;
- const int MAXN = 101;
- const int MAX = 99999999;
- const int point[5][5] = {{5, -1, -2, -1, -3}, {-1, 5, -3, -2, -4}, {-2, -3, 5, -2, -2},
- {-1, -2, -2, 5, -1}, {-3, -4, -2, -1, 0}};
- int f[MAXN][MAXN], data[2][MAXN], num[2];
- int main()
- {
- int cases;
- cin>>cases;
- while (cases--)
- {
- int i,j;
- for (i = 0; i < 2; i ++)
- {
- scanf("%d",num+i);getchar();
- char ch;
- for (j = 0; j < num[i]; j++)
- {
- ch = getchar();
- switch (ch)
- {
- case 'A':
- data[i][j] = 0;
- break;
- case 'C':
- data[i][j] = 1;
- break;
- case 'G':
- data[i][j] = 2;
- break;
- case 'T':
- data[i][j] = 3;
- break;
- }
- }
- }
- int u,v;
- for (u = 0; u < MAXN; u++ )
- for (v = 0; v < MAXN; v++)
- f[u][v] = -MAX;
- f[0][0] = 0;
- for (u = 0; u <= num[0]; ++u)
- {
- for (v = 0; v <= num[1]; ++v)
- {
- if (f[u+1][v+1] < f[u][v] + point[data[0][u]][data[1][v]])
- f[u+1][v+1] = f[u][v] + point[data[0][u]][data[1][v]];
- if (f[u][v+1] < f[u][v] + point[4][data[1][v]])
- f[u][v+1] = f[u][v] + point[4][data[1][v]];
- if (f[u+1][v] < f[u][v] + point[data[0][u]][4])
- f[u+1][v] = f[u][v] + point[data[0][u]][4];
- }
- }
- cout<<f[num[0]][num[1]]<<endl;
- }
- return 0;
- }
- ZOJ 1027
- ZOJ-1027
- ZOJ 1027
- ZOJ 1027
- zoj 1027解题报告
- zoj 1027 dp
- zoj 1027 简单dp
- DP--ZOJ - 1027
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- JavaScript 参考教程
- 让office2007文档(word excel 等)在ie浏览器中打开
- 北京奥运
- 职场节节攀升有十招
- Postfix中如何删除邮件队列[mailq]中的邮件
- ZOJ 1027
- 深入OpenSessionInViewFilter内幕
- 使用MC55实现GPRS通信
- Java 读/写文件文本文件的示例
- 用注册表键存储用户程序的信息
- 送SuperClick挂机软件!
- 架构设计师与SOA(一) (2)
- 简便小巧的4*4按键识别程序(C语言) 简约不简单
- 再接再厉mms 资源 转