hdu 5569(二维dp,水题)
来源:互联网 发布:考勤机更改下载数据 编辑:程序博客网 时间:2024/05/22 11:55
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5569
解题思路:dp[i][j]表示到达(i,j)位置时的最小值。由于目标式的特点,我们一次需要走两格,自然而然转移方程也是两次走:
dp[i][j]->dp[i+2][j],dp[i][j]->dp[i][j+2],dp[i][j]->dp[i+1][j+1]。属于简单的dp问题
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn = 1005;const int inf = 0x3f3f3f3f;int n,m,mat[maxn][maxn];int dp[maxn][maxn];int main(){while(scanf("%d%d",&n,&m)!=EOF){memset(dp,inf,sizeof(dp));for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++)scanf("%d",&mat[i][j]);dp[1][2] = mat[1][1] * mat[1][2];dp[2][1] = mat[1][1] * mat[2][1];for(int i = 1; i <= n; i++)for(int j = 1; j <= m; j++){if(dp[i][j] == inf) continue;if(i + 2 <= n)dp[i+2][j] = min(dp[i+2][j],dp[i][j] + mat[i+1][j] * mat[i+2][j]);if(j + 2 <= m)dp[i][j+2] = min(dp[i][j+2],dp[i][j] + mat[i][j+1] * mat[i][j+2]);if(i + 1 <= n && j + 1 <= m){dp[i+1][j+1] = min(dp[i+1][j+1],dp[i][j] + mat[i][j+1] * mat[i+1][j+1]);dp[i+1][j+1] = min(dp[i+1][j+1],dp[i][j] + mat[i+1][j] * mat[i+1][j+1]);}}printf("%d\n",dp[n][m]);}return 0;}
0 0
- hdu 5569(二维dp,水题)
- hdu 2845 Beans--二维DP
- hdu 2859 (二维dp)
- DP--二维背包--HDU - 2159
- DP--二维背包-- HDU - 3496
- hdu 1227(二维dp)
- Hdu 1978 How many ways 二维dp水题。。
- hdu 2829 Lawrence(二维DP+斜率优化)
- hdu 2159 FATE (二维DP)
- HDU 1081 To The Max 二维dp
- hdu 2159 dp(二维完全背包)
- hdu-2571-二维数组简单dp
- HDU 1081 To The Max ---二维dp
- HDU To The Max 二维DP
- HDU 1158 Employment Planning (简单二维dp)
- HDU 1227 Fast Food(简单二维dp)
- HDU 4901 The Romantic Hero(二维dp)
- HDU 2159 FATE 二维完全背包 dp
- app 的内存优化
- 重装MySQL在start service卡死以及The user specified as a definer (''admin@'%') does not exist 问题
- 暑假训练round2 D: 好序列(Manacher)
- 统计学笔记
- HDU 5728 PowMod
- hdu 5569(二维dp,水题)
- PAT(A) - 1027. Colors in Mars (20)
- 斐波那契查找
- js回调函数
- 云即服务
- 强烈推荐android studio用的几个插件
- poj2299
- sql优化建议
- C语言复杂声明的理解