WNJXYK在上體育課。今天體育老師不在,WNJXYK就有時間和同學們一起玩遊戲了。
突然,YouKnowWho發現,WNJXYK的面前有n個方格,每個方格上面寫了一個數字。
YouKnowWho突然想起了兒時的“跳房子”遊戲。可是作爲大學生,怎麼能玩這麼…低齡…的遊戲呢!於是決定樹立一個新的規則。WNJXYK可以從方格外開始起跳。他每跳到一個格子上,就可以獲得格子上數字那麼多錢!但是他下一步跳到的格子上的數字必須比當前格子上的數字更大。
WNJXYK慌了,不知道他能拿到的錢是多少。聰明的你可以幫他計算一下嗎?
Input
輸入包含多組測試樣例。每一個測試樣例被如下描述:
N v1 v2 … vN
保證對於每一個測試樣例,N ≤ 1000,並且 vi在32位整數範圍內。
以0開頭的測試樣例作爲輸入終止標誌,並且這組樣例不被處理。
Output
對於每一個測試樣例,輸出根據規則他最多可以獲得的金額,每個測試樣例一行。
Sample Input
3 1 3 2
5 1 1 2 3 4
4 3 2 1 1
0
Sample Output
4
10
3
其實這一題就是最大上升子序列 要求這個上升的子序列的和是最大的
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int* arr = new int[n + 1];
int* dp = new int[n + 1];
for (int i = 0;i < n;i++) {
cin >> arr[i];
dp[i] = 1;
}
for (int i = 1;i < n;i++) {
for (int j = 0;j < i;j++) {
if (arr[i] > arr[j])
dp[i] = max(dp[i], dp[j]+1);
}
}
cout << *max_element(dp, dp + n);
}