标签:pop another his pos solution term tps with range
题目:
InputInput contains multiple test cases. Each test case is described in a line as follow:
N value_1 value_2 …value_N
It is guarantied that N is not more than 1000 and all value_i are in the range of 32-int.
A test case starting with 0 terminates the input and this test case is not to be processed.
OutputFor each case, print the maximum according to rules, and one line one case.
Sample Input
3 1 3 2 4 1 2 3 4 4 3 3 2 1 0
Sample Output
4 10 3
题意描述:
输入N和N个数字(均是整型数)
计算并输出最大上升子序列之和
解题思路:
该题属于DP水题,第一层循环遍历数组,第二层循环遍历以i结尾的最大上升子序列,判断是否满足上升,是的话选择dp[i]和dp[j]+num[i]的较大值,第二层循环结束后看以i结尾的最大上升子序列是否变大,变大则更新dp[i],并且每
次记录最大值maxr。双层循环结束后输出maxr即可。
代码实现:
1 #include<stdio.h> 2 #include<algorithm> 3 using namespace std; 4 #include<string.h> 5 int main() 6 { 7 int n,i,j,dp[1010],num[1010],maxr; 8 while(scanf("%d",&n),n != 0) 9 { 10 num[0]=0; 11 for(i=1;i<=n;i++) 12 scanf("%d",&num[i]); 13 memset(dp,0,sizeof(dp)); 14 maxr=-9999999; 15 for(i=1;i<=n;i++) 16 { 17 for(j=0;j<i;j++) 18 { 19 if(num[j]<num[i]) 20 dp[i]=max(dp[i],dp[j]+num[i]); 21 } 22 dp[i]=max(dp[i],num[i]); 23 if(dp[i] > maxr) 24 maxr=dp[i]; 25 } 26 printf("%d\n",maxr); 27 } 28 return 0; 29 }
HDU 1087 Super Jumping! Jumping! Jumping!
标签:pop another his pos solution term tps with range
原文地址:http://www.cnblogs.com/wenzhixin/p/7267906.html