hdu 5569
题意:一个矩阵,从(1,1)走到(n,m),只能右,下,问最短路径和最短,路径和为走过的点a1*a2+a2*a3+.....
思路:暴力转移即可
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N=1002; int a[N][N]; ll dp[N][N]; int n,m; int main(){ while(scanf("%d%d",&n,&m)!=EOF){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); } for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) dp[i][j]=1e18; dp[1][0]=0;dp[0][1]=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(i>1&&j>1){ dp[i][j]=min(dp[i][j],dp[i-1][j-1]+min(a[i][j]*a[i-1][j],a[i][j-1]*a[i][j])); } if(i>1) dp[i][j]=min(dp[i][j],dp[i-2][j]+a[i-1][j]*a[i][j]); if(j>1) dp[i][j]=min(dp[i][j],dp[i][j-2]+a[i][j-1]*a[i][j]); } } cout<<dp[n][m]<<endl; } return 0; }