【HDOJ】1080 Human Gene Functions
2024-09-13 03:02:53
DP。wa了一下午,原来是把mmax写在外层循环了。最近事情太多了,刷题根本没状态。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <map>
#include <iostream>
using namespace std; #define MAXN 205
#define INF -99999
#define TOKEN '-' char r[MAXN], l[MAXN];
int dp[MAXN][MAXN];
int t, n, rn, ln;
map<char, int> m; int mmap[][] = {
{, -, -, -, -},
{-, , -, -, -},
{-, -, , -, -},
{-, -, -, , -},
{-, -, -, -, }
}; int getmax(int a, int b) {
return a>b ? a:b;
} void init() {
m['A'] = ;
m['C'] = ;
m['G'] = ;
m['T'] = ;
m[TOKEN] = ;
} int main() {
int i, j, k, tmp, mmax;
init(); #ifndef ONLINE_JUDGE
freopen("data.in", "r", stdin);
freopen("data.out", "w", stdout);
#endif scanf("%d", &t);
while (t--) {
scanf("%d %s", &rn, r);
scanf("%d %s", &ln, l);
dp[rn][ln] = ;
for (i=rn-; i>=; --i) {
dp[i][ln] = dp[i+][ln] + mmap[m[r[i]]][];
}
for (j=ln-; j>=; --j) {
dp[rn][j] = dp[rn][j+] + mmap[][m[l[j]]];
}
for (i=rn-; i>=; --i) {
for (j=ln-; j>=; --j) {
mmax = INF;
if (r[i] == l[j])
mmax = getmax(mmax, mmap[m[r[i]]][m[l[j]]]+dp[i+][j+]);
else {
mmax = getmax(mmax, mmap[m[r[i]]][]+dp[i+][j]);
mmax = getmax(mmax, mmap[m[l[j]]][]+dp[i][j+]);
mmax = getmax(mmax, mmap[m[r[i]]][m[l[j]]]+dp[i+][j+]);
}
dp[i][j] = mmax;
}
}
printf("%d\n", dp[][]);
} return ;
}
最新文章
- RecyclerView的使用之多种Item加载布局
- COGS1117
- 在IE6、IE7中实现块元素的inline-block效果
- POJ 3384
- linux定时运行命令脚本——crontab
- schedule
- PTA - - 06-图1 列出连通集 (25分)
- iOS_ @property参数分析
- c语言利用指针计算字符串的长度
- Linux进程通信学习总结
- windows上使用foremost
- Linux 子网掩码计算, 二进制十进制互相转换
- mysql安装后不是内部或外部命令解决
- RSD 直观介绍
- tp5+layui 实现上传大文件
- poj-1989 The Cow Lineup
- django配置连接多个数据库,自定义表名称
- Daily Scrum (2015/10/30)
- Java时间的使用
- 为什么我再也不想和 Google HR 交谈了