http://acm.pku.edu.cn/JudgeOnline/problem?id=1163
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
int n;
cin>>n;
int total=(1+n)*n/2;
int *num;
num =new int[total];
for(int i=0;i<total;i++)
cin>>num[i];
for(int i=total-1;i>0;i--)
{
int line=sqrt(i*2+0.25)-0.5;
if(i!=(1+line)*line/2)
num[i-line-1]=num[i-line-1]+(num[i]>num[i-1]?num[i]:num[i-1]);
}
cout<<num[0]<<endl;
return 0;
}
据说这是DP,代码只有15行的DP。。。
一次性AC