P1219数字三角形,bfs.
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node
{
int x,y,sum;
};
queue<node> q;
int n,a[1001][1001],ans,f[1001][1001];
int dx[2]={1,1};
int dy[2]={0,1};
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
cin>>a[i][j];
}
}
q.push(node{1,1,a[1][1]});
f[1][1]=a[1][1];
while(!q.empty())
{
node t=q.front();
q.pop();
ans=max(ans,t.sum);
for(int i=0;i<2;i++)
{
int tx=t.x+dx[i];
int ty=t.y+dy[i];
if(tx>=1 && tx<=n && ty>=1 && ty<=tx)
{
if(f[t.x][t.y]+a[tx][ty]>f[tx][ty])
{
f[tx][ty]=f[t.x][t.y]+a[tx][ty];
q.push({tx,ty,f[tx][ty]});
}
}
}
}
cout<<ans;
return 0;
}