SDUT_线性dp联系结题报告:
2011-11-29 13:50
344 查看
1001:求最大子段和,关键是判断当前位置选与不选的状态状态转移方程:dp[i]=max(dp[i-1]+a[i],a[i]);还要记录起点与终点(单独开了一个结构体记录到达每个点的起点与终点)
http://acm.hdu.edu.cn/showproblem.php?pid=1003
View Code
http://acm.hdu.edu.cn/showproblem.php?pid=1003
View Code
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int map[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 a[107],b[107]; char s1[107],s2[107]; int f[107][107]; int Max(int x,int y,int z) { int tmp=-99999999; if(tmp<x) tmp=x; if(tmp<y) tmp=y; if(tmp<z) tmp=z; return tmp; } int main() { int t,n,m,i,j; scanf("%d",&t); while(t--) { cin>>n>>s1; cin>>m>>s2; for(i=0;i<n;i++) { if(s1[i]=='A') a[i+1]=0; else if(s1[i]=='C') a[i+1]=1; else if(s1[i]=='G') a[i+1]=2; else if(s1[i]=='T')a[i+1]=3; } for(i=0;i<m;i++) { if(s2[i]=='A') b[i+1]=0; else if(s2[i]=='C') b[i+1]=1; else if(s2[i]=='G') b[i+1]=2; else if(s2[i]=='T')b[i+1]=3; } f[0][0]=0; for(i=1;i<=n;i++) f[i][0]=f[i-1][0]+map[a[i]][4]; for(j=1;j<=m;j++) f[0][j]=f[0][j-1]+map[4][b[j]]; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { int f1=f[i-1][j-1]+map[a[i]][b[j]]; int f2=f[i-1][j]+map[a[i]][4]; int f3=f[i][j-1]+map[4][b[j]]; f[i][j]=Max(f1,f2,f3); } } cout<<f [m]<<endl; } return 0; }
相关文章推荐
- HDU - 1028 Ignatius and the Princess III解题报告(线性dp)
- SDUT_线型DP解题报告
- 【简单的线性DP】SDUT 3924 疯狂的bLue
- 【解题报告】uva10066_The Twin Towers(双塔, dp, LCS)
- HDU 3455 Leap Frog (线性dp)
- NOIP 2008传纸条 解题报告(棋盘型DP,多线程)
- UVA 10003 Cutting Sticks [线性结构dp] [最优矩阵链乘]
- ***POJ2479 Maximum sum ACM解题报告(DP难题)
- POJ-2346 Lucky tickets(线性DP)
- lightoj-1422 - Halloween Costumes 解题报告 区间dp
- HGC 1356 Prime Node【树形DP+线性素数打表】
- HDU-1078___FatMouse and Cheese —— 解题报告 dp动态数组
- 假期集训--线性dp
- 【实验报告】数据结构实验二:线性表的实验
- CodeVS 1090 [NOIP 2003] 区间DP 解题报告
- pku 2411 modriaans dream 压缩dp 解题报告
- sdut1309——不老的传说问题(区间DP)
- SDUT 2778 小明的花费预算 (二分答案) -- 解题报告
- [线性DP]轮渡问题(LIS应用)
- SDUT3903 CF(dp+贪心) 2017山东ACM省赛