动态规划终于有一点点思路了,自己写了第一个程序,不过一开始有好多错误,不过进步总是好的!!加油
这道题主要是求解给定序列的最大递增序列和;
状态转移方程是sum[i]=max{sum[j]}+a[i];0<=j<i=n;
动态规划求出所有的sum[i],并且每次都与max(最终的结果)变量比较。
下面是源码:
#include<iostream>
#define size 1001
using namespace std;
int main()
{
__int64 sum[size],max;
int a[size], i,j,n;
while(cin>>n&&n)
{
for(i=1;i<=n;i++)
{scanf("%d",&a[i]);
sum[i]=a[i];
}
max=sum[1];
for(i=1;i<=n;i++)
{
for(j=1;j<i;j++)
if(a[i]>a[j]&&sum[i]<sum[j]+a[i])
sum[i]=sum[j]+a[i];
if(max<sum[i])
max=sum[i];
}
printf("%I64d/n",max);
}
return 0;
}