洛谷U279551
#include<bits/stdc++.h>
using namespace std;
int main ()
{
int n,a[510][510];
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++){
cin>>a[i][j];
}
for(int i=n-1;i>=1;i--)//倒着找最大的数,但是是从倒数第二层找最后一层,以此类推
for(int j=1;j<=i;j++){
a[i][j]=max(a[i+1][j],a[i+1][j+1])+a[i][j];//找相邻两个数中最大的那个
}
cout<<a[1][1];
return 0;
}
洛谷U279552
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int a[N],f[N];
int ans=0;
int main() {
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
f[i]=1;//因为要找最长序列,所以将一个数做为一个子序列,所以最差情况下也有一个长度为一的子序列
for(int j=1;j<i;j++)
if(a[j]<a[i])
f[i]=max(f[i],f[j]+1);//寻找最长的序列
}
for(int i=1;i<=n;i++){
ans=max(ans,f[i]);//更新答案
}
cout<<ans;
return 0;
}