hdu5074 Hatsune Miku(简单dp)
2015-10-06 21:26
295 查看
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=5074
题目大意:
给一个m*m的矩阵,有n个数a[i]。然后定义score(i,j)是矩阵第i行第j列的值,i,j分别是a[i]和a[i+1]。现在给出了n个数a[i],如果a[i]是-1,那么就可以把a[i]变成1~n里面的任意一个数。现在问能得到的最大分数是多少。
思路:
简单的dp。设dp[i][j]代表前i个数最后一个为j时候的最大分数。
所以可以分情况讨论:
如果a[i]和a[i-1]都未知,那么dp[i][j]=max(dp[i][j],dp[i-1][k]+ms[k][j]);
如果a[i]未知,a[i-1]已知,那么dp[i][j]=max(dp[i][j],dp[i-1][a[i-1]]+ms[a[i-1]][j]);
如果a[i]已知,a[i-1]未知,那么dp[i][a[i]]=max(dp[i][a[i],dp[i-1][k]+ms[k][a[i]]);
代码:
http://acm.hdu.edu.cn/showproblem.php?pid=5074
题目大意:
给一个m*m的矩阵,有n个数a[i]。然后定义score(i,j)是矩阵第i行第j列的值,i,j分别是a[i]和a[i+1]。现在给出了n个数a[i],如果a[i]是-1,那么就可以把a[i]变成1~n里面的任意一个数。现在问能得到的最大分数是多少。
思路:
简单的dp。设dp[i][j]代表前i个数最后一个为j时候的最大分数。
所以可以分情况讨论:
如果a[i]和a[i-1]都未知,那么dp[i][j]=max(dp[i][j],dp[i-1][k]+ms[k][j]);
如果a[i]未知,a[i-1]已知,那么dp[i][j]=max(dp[i][j],dp[i-1][a[i-1]]+ms[a[i-1]][j]);
如果a[i]已知,a[i-1]未知,那么dp[i][a[i]]=max(dp[i][a[i],dp[i-1][k]+ms[k][a[i]]);
代码:
#include<stdio.h> #include<string.h> int max(int a,int b) { return a>b?a:b; } int main() { int T,n,m,i,j,k,maps[100][100],a[105],dp[105][105]; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(i=1;i<=m;i++) for(j=1;j<=m;j++) scanf("%d",&maps[i][j]); for(i=1;i<=n;i++) scanf("%d",&a[i]); memset(dp,0,sizeof(dp)); for(i=2;i<=n;i++) { if(a[i]>0&&a[i-1]>0) { dp[i][a[i]]=dp[i-1][a[i-1]]+maps[a[i-1]][a[i]]; } else if(a[i]>0&&a[i-1]<0) { for(k=1;k<=m;k++) dp[i][a[i]]=max(dp[i][a[i]],dp[i-1][k]+maps[k][a[i]]); } else if(a[i]<0&&a[i-1]<0) { for(j=1;j<=m;j++) for(k=1;k<=m;k++) dp[i][j]=max(dp[i][j],dp[i-1][k]+maps[k][j]); } else if(a[i]<0&&a[i-1]>0) { for(k=1;k<=m;k++) dp[i][k]=max(dp[i][k],dp[i-1][a[i-1]]+maps[a[i-1]][k]); } } int ans=0; for(i=1;i<=m;i++) ans=max(ans,dp [i]); printf("%d\n",ans); } return 0; }
相关文章推荐
- 个人博客作业Week3
- EF code first Acceleration - CodeFirst 加速
- 指针的输入输出模型
- 择校记1(转)
- 匿名内部类使用总结
- UIKit学习笔记2
- hdu 2825(ac自动机+状态压缩dp)
- 【C++】简单对称加密
- 【Python】Learn Python the hard way, ex3 运算符,浮点数
- java内部类(三,嵌套类)
- hdu 5131(2014 广州—模拟)
- hdu 5131(2014 广州—模拟)
- ns-2与TCP拥塞模拟 之二 模拟输出的封包trace文件格式
- 细数EDM营销中存在的两大盲点
- C++链式队列
- Codeforces Round #259 (Div. 2) D. Little Pony and Harmony Chest 状压DP
- HDU 4850 Wow! Such String! 欧拉回路
- i/o notes
- ubuntu系统与win 7系统时间不一致问题
- Python正则表达式学习小结