[Acwing] 275. 传纸条 双向DP ||数字三角形模型

前言

差不多一样的题
传送门 :

思路

虽然本题是从两个角跑出来

但是其实想想 和 从左上角跑出来一样的

因此这题是可以抽象为 方格取数模型

所以在原方程不变的情况下,我们做一些边界处理就行

还有就是 n 和 m 竟然是倒过来的 吐血。。

CODE

void solve()
{
    cin>>m>>n;
    
    
    int a,b,c;
  //  while(cin>>a>>b>>c,a||b||c) w[a][b] = c;
	
	for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
		cin>>w[i][j];
		
    for(int k=2; k<=n+m; k++)
    {
        for(int i1=1; i1<=m; i1++)
            for(int i2 =1; i2<=m; i2++)
            {
                int j1 = k-i1;
                int j2 = k-i2;

				if(j1 > 0  && j1<=n && j2>0 &&j2<=n)
				{
                 int t = w[i1][j1];
                 if(i1!=i2) t+=w[i2][j2];

                 int &x = f[k][i1][i2];

                 x = max(x,f[k-1][i1-1][i2-1]+t);
                 x = max(x,f[k-1][i1-1][i2]+t);
                 x = max(x,f[k-1][i1][i2-1]+t);
                 x = max(x,f[k-1][i1][i2]+t);
                }
            }
    }
    cout<<f[n+m][m][m]<<endl;

}
上一篇:【数据结构与算法】蓄水池抽样算法(Reservoir Sampling)


下一篇:矩阵树定理