第1关:最长上升子序列
#include <iostream>
using namespace std;
void MaxUp(int arr[],int len)
{
/********** Begin **********/
//补充代码完成任务
int maxLen[len + 2];
maxLen[1] = arr[0];
int length = 1;
for(int i = 1; i < len; i++) {
if(arr[i] > maxLen[length]) {
maxLen[++length] = arr[i];
}else {
for(int j = 1; j <= len; j++) {
if(arr[i] <= maxLen[j]) {
maxLen[j] = arr[i];
break;
}
}
}
}
printf("%d", length);
/********** End **********/
}
第2关:数字三角形
#include <iostream>
#include <algorithm>
using namespace std;
void MaxSum(int arr[][10],int wid)
{
/********** Begin **********/
// 拷贝一份arr
int brr[wid][10];
for(int i = 0; i < wid; i++) {
for(int j = 0; j < 10; j++) {
brr[i][j] = arr[i][j];
}
}
//补充代码完成功能
//从底到头到最后头节点就是最大值
for(int i = wid - 1; i >= 0; i--) {
// 如果 i - 1 < 0 结束
if(i - 1 < 0) {
break;
}
for(int j = 0; j < 10; j++) {
brr[i - 1][j] = max(brr[i][j] + brr[i - 1][j], brr[i][j + 1] + brr[i - 1][j]);
}
}
cout<<brr[0][0];
/********** End **********/
}