您的位置:首页 > 其它

简单的DP练习_杭电1087

2012-11-24 20:59 302 查看
简单的DP


#include<iostream>
#include<string>
using namespace std;
int main()
{
int a[1010];
int dp[1010];
int n, max;
int i1, i2, i3;
while( cin >> n )
{
if( n == 0)
break;
for(  i1 = 0; i1 < n; i1 ++ )
{
cin >> a[i1];
dp[i1] = a[i1];                                    //先将每个数的递增子序列设为其本身
}

for(  i2 = 0; i2 < n; i2 ++ )
{
max = 0;
for( i3 = 0 ; i3 < i2 ; i3++)
if( a[i2] > a[i3] && max < dp[i3])            //如果a[i2]前面没有比它小的数,dp[i2] = a[i2], 如果前面有比它小的数,
{                                            //那么dp[i2]是在前面比它小的数中, 选出递增子序列最大的数i3 dp[i2]+= dp[i3];
max = dp[i3];
dp[i2]= dp[i3] + a[i2];
}
}

for( i1 = 0, max = 0; i1 < n; i1++)
if( max < dp[i1] )
max = dp[i1];

cout << max << endl;

memset( dp, 0, sizeof(dp));
memset( a, 0, sizeof(a) );
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: