数字三角形模型
一、数字三角形模型
最低通行费

样例输入:
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;
}
方格取数

思路:

样例输入:
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;
}

浙公网安备 33010602011771号