数字三角形模型

一、数字三角形模型

最低通行费

![在这里插入图片描述]( https://img-blog.csdnimg.cn/0c697b6befdd44fb8a7e0556356e89dd.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAUGFuc2XCtw==,size_20,color_FFFFFF,t_70,g_se,x_16)

样例输入:

5
1 4 6 8 10
2 5 7 15 17
6 8 9 18 20
10 11 12 19 21
20 23 25 29 33

样例输出:

109

代码模板:

#include<iostream>
#include<algorithm>
using namespace std;
const int N = 105,INF = 1e9;
int n,g[N][N],d[N][N];
int main(){
	cin>>n;
	
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			cin>>g[i][j];
			

	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			if(i==1&&j==1) d[i][j]=g[i][j];
			else{
				d[i][j]=INF;
				if(i>1) d[i][j]=min(d[i][j],d[i-1][j]+g[i][j]);
				if(j>1) d[i][j]=min(d[i][j],d[i][j-1]+g[i][j]);
			}

		cout<<d[n][n]<<endl;
}
		
			

 

方格取数

![在这里插入图片描述]( https://img-blog.csdnimg.cn/9560ba9d0ad04c6cbc2066aab7c2c3fa.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAUGFuc2XCtw,size_20,color_FFFFFF,t_70,g_se,x_16)
思路:
![在这里插入图片描述]( https://img-blog.csdnimg.cn/8a2bde5880c344d3b95930c787c8569e.png?x-oss-process=image/watermark ,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAUGFuc2XCtw
,size_20,color_FFFFFF,t_70,g_se,x_16)

样例输入:

8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0

样例输出:

67

代码模板:

#include<iostream>
#include<algorithm>
using namespace std;

const int N = 15;

int n,w[N][N];
int f[N*2][N][N]; //两条路同时dp

int main(){
	cin>>n;
	
	int a,b,c;
	while(cin>>a>>b>>c,a||b||c) w[a][b]=c;
	
	for(int k=2;k<=n+n;k++)
		for(int i1=1;i1<=n;i1++)
			for(int i2=1;i2<=n;i2++)
			{
				int j1=k-i1,j2=k-i2;
				if(j1>=1&&j1<=n&&j2>=1&&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+n][n][n]<<endl;
	
	return 0;
}

 

posted @ 2022-03-22 14:15  panse·  阅读(90)  评论(0)    收藏  举报