.//这是一道DP,题目求得是最大上升子序和
AC代码:
#include<stdio.h> #include<algorithm> using namespace std; #include<string.h> #define N 1005 #define INF -0x3f3f3f3f int a[N]; int dp[N]; int main() { int n; while(scanf("%d",&n)!=EOF&&n) { int i,j; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { scanf("%d",&a[i]); } int ans; for(i=1;i<=n;i++) { ans=INF; for(j=0;j<i;j++) { if(a[i]>a[j]) { ans=max(dp[j],ans); } } dp[i]=ans+a[i]; } int M=INF; for(i=1;i<=n;i++) { if(M<dp[i]) { M=dp[i]; } } printf("%d\n",M); } return 0; }