HDOJ 1087 Super Jumping! Jumping! Jumping! 解题报告
动态规划,最大上升子序列和。状态是每个位置的最大和,写出状态转移方程就好啦。和上一题FatMouse's Speed相似,而且简单一点。
下面是笔者的AC代码:
#include <iostream> using namespace std; struct State { int num; long long sum; } s[1001]; int main() { int i,j,n; long long max; while(cin>>n && n) { for(i=0;i<n;i++) { cin>>s[i].num; s[i].sum=s[i].num; } max=s[0].num; for(i=1;i<n;i++) for(j=0;j<i;j++) if(s[i].num>s[j].num && s[i].sum<s[j].sum+s[i].num) { s[i].sum=s[j].sum+s[i].num; if(max<s[i].sum) max=s[i].sum; } cout<<max<<endl; } }