【HDU5074】Hatsune Miku(简单DP)
来源:互联网 发布:java调用webapi接口 编辑:程序博客网 时间:2024/05/17 04:08
记录一个菜逼的成长。。
题解摘自:http://blog.csdn.net/sr_19930829/article/details/40392311?utm_source=tuicool&utm_medium=referral
分情况讨论:
当note[i] >0 (i>=2)时:
当note[i-1]>0时: dp[i][note[i]]=dp[i-1][note[i-1]]+score[note[i-1]][note[i]];
当note[i-1]<0时: dp[i][note[i]]=max(dp[i][note[i]],dp[i-1][j]+score[j][note[i]]); 1<=j<=m, 枚举第i-1个音符是第几种音符
当note[i]<0 (i>=2)时:
当note[i-1]>0时:dp[i][j]=max(dp[i][j],dp[i-1][note[i-1]]+score[note[i-1]][j]); 1<=j<=m, 枚举第i个音符是第几种音符
当note[i-1]<0时:dp[i][j]=max(dp[i][j],dp[i-1][k]+score[k][j]); 1<=j,k<=m, 枚举第i个音符和第i-1个音符是第几种音符
PS:虽然一看我也知道是简单DP,但状态定义不是很准确/(ㄒoㄒ)/~~,还得多学习。
#include <cstdio>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cstdlib>#include <vector>#include <set>#include <map>#include <queue>#include <stack>#include <list>#include <deque>#include <cctype>#include <bitset>#include <cmath>using namespace std;#define ALL(v) (v).begin(),(v).end()#define cl(a) memset(a,0,sizeof(a))#define bp __builtin_popcount#define pb push_back#define fin freopen("D://in.txt","r",stdin)#define fout freopen("D://out.txt","w",stdout)#define lson t<<1,l,mid#define rson t<<1|1,mid+1,r#define seglen (node[t].r-node[t].l+1)typedef long long LL;typedef unsigned long long ULL;typedef pair<int,int> PII;typedef pair<LL,LL> PLL;typedef vector<PII> VPII;const int INF = 0x3f3f3f3f;const int MOD = 1e9 + 7;template <typename T>inline void read(T &x){ T ans=0; char last=' ',ch=getchar(); while(ch<'0' || ch>'9')last=ch,ch=getchar(); while(ch>='0' && ch<='9')ans=ans*10+ch-'0',ch=getchar(); if(last=='-')ans=-ans; x = ans;}inline bool DBread(double &num){ char in;double Dec=0.1; bool IsN=false,IsD=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&in!='.'&&(in<'0'||in>'9')) in=getchar(); if(in=='-'){IsN=true;num=0;} else if(in=='.'){IsD=true;num=0;} else num=in-'0'; if(!IsD){ while(in=getchar(),in>='0'&&in<='9'){ num*=10;num+=in-'0';} } if(in!='.'){ if(IsN) num=-num; return true; }else{ while(in=getchar(),in>='0'&&in<='9'){ num+=Dec*(in-'0');Dec*=0.1; } } if(IsN) num=-num; return true;}template <typename T>inline void write(T a) { if(a < 0) { putchar('-'); a = -a; } if(a >= 10) write(a / 10); putchar(a % 10 + '0');}/******************head***********************/const int maxn = 100 + 10;int a[maxn][maxn],dp[maxn][maxn],note[maxn];int main(){ int T;read(T); while(T--){ cl(dp); int n,m; read(n),read(m); for( int i = 1; i <= m; i++ ){ for( int j = 1; j <= m; j++ ){ read(a[i][j]); } } for( int i = 1; i <= n; i++ ){ read(note[i]); } for( int i = 2; i <= n; i++ ){ if(note[i] > 0){ if(note[i-1] > 0){ dp[i][note[i]] = dp[i-1][note[i-1]] + a[note[i-1]][note[i]]; } else { for( int j = 1; j <= m; j++ ){ dp[i][note[i]] = max(dp[i][note[i]],dp[i-1][j] + a[j][note[i]]); } } } else { if(note[i-1] > 0){ for( int j = 1; j <= m; j++ ){ dp[i][j] = max(dp[i][j] , dp[i-1][note[i-1]] + a[note[i-1]][j]); } } else { for( int j = 1; j <= m; j++ ){ for( int k = 1; k <= m; k++ ){ dp[i][k] = max(dp[i][k],dp[i-1][j] + a[j][k]); } } } } } int ans = 0; for( int i = 1; i <= m; i++ ){ ans = max(ans,dp[n][i]); } printf("%d\n",ans); } return 0;}
0 0
- 【HDU5074】Hatsune Miku(简单DP)
- hdu5074 Hatsune Miku dp
- hdu5074 Hatsune Miku(简单dp)
- hdu5074 Hatsune Miku
- hdu5074——Hatsune Miku
- hdu5074-递推-Hatsune Miku
- HDU 5074 Hatsune Miku(简单二维dp)
- hdu 5074 Hatsune Miku 简单dp
- HDU5074 ACM-ICPC亚洲区域赛鞍山赛区现场赛E题 Hatsune Miku 二维DP
- hdu Hatsune Miku(DP)
- HDOJ5074 Hatsune Miku(dp)
- Hatsune Miku+hdu+鞍山区域赛+简单dp
- [ACM] HDU 5074 Hatsune Miku (简单DP)
- 2014鞍山站 E - Hatsune Miku(简单DP)
- HDOJ 5074 Hatsune Miku DP
- HDU 5074 Hatsune Miku(DP)
- hdu 5074 Hatsune Miku(dp)
- hdoj 5074 Hatsune Miku 【DP】
- Linux/Ubuntu sudo不用输入密码的方法
- Logcat完美输出
- iOS开发拓展篇—音频处理(音乐播放器5)
- Node.Js cheerio模块简单API
- 虚继承与对象内存大小
- 【HDU5074】Hatsune Miku(简单DP)
- Codevs 1358 棋盘游戏
- 我对androidannotations库的看法
- 深入理解JS的构造函数
- Astah绘制UML图形-入门篇
- redis简介、安装与启动,开机自启
- Linux进程间通信——使用共享内存
- 制作系统自启动脚本
- 心情 - 201608