题目连接:http://acm.hust.edu.cn/vjudge/contest/126708#problem/A
题目是求最大的上升子序列。代码思路很清晰。
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int d[1005];//一共有n个数,d[i]其实表示从i到n的最大的递增序列的和 int a[1005];//装初值 int main() { int n; while(scanf("%d",&n)&&n!=0) { memset(d,0,sizeof(d)); memset(a,0,sizeof(a)); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); d[i]=a[i]; } for(int i=n-1;i>=1;i--)//从n-1开始 { int max=0; for(int j=i+1;j<=n;j++) { if(a[j]>a[i])//满足递增,后面的数要大于前面的数 { if(max<d[j]) max=d[j];//找到i后面的最大的递增序列 } } d[i]+=max; } int max=0; for(int i=1;i<=n;i++) { if(max<d[i]) max=d[i]; } printf("%d ",max); } return 0; }