洛谷提高组P1004+1006
Posted 未定_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了洛谷提高组P1004+1006相关的知识,希望对你有一定的参考价值。
题意:有N×N 的方格图,将其中的某些方格中填入正整数,而其他的方格放入0
A
0 0 0 0 0 0 0 0
0 0 13 0 0 6 0 0
0 0 0 0 7 0 0 0
0 0 0 14 0 0 0 0
0 21 0 0 0 4 0 0
0 0 15 0 0 0 0 0
0 14 0 0 0 0 0 0
0 0 0 0 0 0 0 0
B
某人从图的左上角A点出发,可以向下或向右走,直到到达右下角B点。在走过的路上,可以取走方格中的数(取走后的方格中将变为数字 0)。
已知从A点到B点共走两次,试找出2条这样的路径,使得取得的数之和为最大。
分析:动态规划,4维数组分别记录两条线路的位置坐标即可。
唯一的不足就是用了4重循环,题干给的数据范围比较小,其实应该更优化一点,暂时还不会。
#include<iostream>
using namespace std;
int a[10][10];
int f[10][10][10][10];
int max1(int a,int b,int c,int d)
int m=max(a,b);
m=max(m,c);
m=max(m,d);
return m;
int main()
int n,x,y,z;
cin>>n;
for(int i=0; i<=n; i++)
for(int j=0; j<=n; j++)
a[i][j]=0;
cin>>x>>y>>z;
while(x+y+z!=0)
a[x][y]=z;
cin>>x>>y>>z;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int h=1;h<=n;h++)
for(int k=1;k<=n;k++)
if(i!=h&&j!=k)
f[i][j][h][k]=max(f[i][j][h][k],(max1(f[i-1][j][h-1][k],f[i-1][j][h][k-1],f[i][j-1][h-1][k],f[i][j-1][h][k-1])+a[i][j]+a[h][k]));
else f[i][j][h][k]=max(f[i][j][h][k],(max1(f[i-1][j][h-1][k],f[i-1][j][h][k-1],f[i][j-1][h-1][k],f[i][j-1][h][k-1])+a[i][j]));
cout<<f[n][n][n][n]<<endl;
分析:和方格取数是一种题型,改一下输入条件和范围就可以了。
(看题干想偏了,想了两种方法,一种是两个二维dp数组,一个记录从小渊到小轩的最大值,路过点标0,然后再记录从小轩回到小渊的最大值,忽略了有去无回的情况,所以不对;另一种四维dp数组,和方格取数一样,不过一个起点在[1][1]另一个在[m][n],实际上还是忽略了有去无回的情况。)
#include<iostream>
using namespace std;
int a[51][51];
int f[51][51][51][51];
int max1(int a,int b,int c,int d)
int m=max(a,b);
m=max(m,c);
m=max(m,d);
return m;
int maxx=0;
int main()
int m,n;
cin>>m>>n;
for(int i=0; i<=m; i++)
for(int j=0; j<=n; j++)
a[i][j]=0;
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
cin>>a[i][j];
for(int i=1; i<=m; i++)
for(int j=1; j<=n; j++)
for(int h=1; h<=m; h++)//必须从1开始
for(int k=1; k<=n; k++)
if(i!=h&&j!=k)
f[i][j][h][k]=max(f[i][j][h][k],(max1(f[i-1][j][h-1][k],f[i-1][j][h][k-1],f[i][j-1][h-1][k],f[i][j-1][h][k-1])+a[i][j]+a[h][k]));
else f[i][j][h][k]=max(f[i][j][h][k],(max1(f[i-1][j][h-1][k],f[i-1][j][h][k-1],f[i][j-1][h-1][k],f[i][j-1][h][k-1])+a[i][j]));
cout<<f[m][n][m][n]<<endl;
以上是关于洛谷提高组P1004+1006的主要内容,如果未能解决你的问题,请参考以下文章