分析:简单DP,转移方程dp[j]=max{dp[i]}+a[j];(0<=i<j<n,a[i]<a[j])。
#include<iostream> using namespace std; __int64 dp[1001]; int a[1001]; int main() { int i,n,j; __int64 max; while(cin>>n && n) { for(i=0;i<n;i++) cin>>a[i]; max=0x7fffffffffffffff+1; for(i=0;i<n;i++) { dp[i]=a[i]; max=max>dp[i]?max:dp[i]; for(j=0;j<i;j++) if(a[i]>a[j]) if(dp[i]<dp[j]+a[i]) { dp[i]=dp[j]+a[i]; max=max>dp[i]?max:dp[i]; } } printf("%I64d\n",max); } return 0; }
时间: 2024-10-12 22:29:40