线性DP-方格取数

方格取数

这道题和开始的那个传纸条有点像,就不多说了。直接上代码把。

#include<bits/stdc++.h>
using namespace std;
const int N=1e1+5;
int f[N*2+5][N][N],m[N][N];
int main()
{
	int n; cin>>n;
	int a,b,c;
	while(cin>>a>>b>>c){
		if(!a&&!b&&!c) break;
		m[a][b]=c;
	}
	for(int i=2;i<=n*2;i++){
		for(int x1=max(1,i-n);x1<=n&&x1<i;x1++){
			for(int x2=max(1,i-n);x2<=n&&x2<i;x2++){
				int tmp=m[x1][i-x1];
				if(x1!=x2) tmp+=m[x2][i-x2]; 
				for(int a=0;a<=1;a++){
					for(int b=0;b<=1;b++){
						f[i][x1][x2]=max(f[i][x1][x2],f[i-1][x1-a][x2-b]+tmp);
					}
				}
			}
		}
	}
	cout<<f[n*2][n][n]<<endl;
}
发布了92 篇原创文章 · 获赞 6 · 访问量 1182

猜你喜欢

转载自blog.csdn.net/weixin_42979819/article/details/103896991