HDU 5569 矩阵的最小贡献 (DP)
来源:互联网 发布:孟加拉地区代码数据库 编辑:程序博客网 时间:2024/06/05 08:40
问题描述
给定n∗m(n+m为奇数)的矩阵,从(1,1)走到(n,m)且只能往右往下走,设经过的数为a1,a2...a2k,贡献为a1∗a2+a3∗a4+...+a2k−1∗a2k,求最小贡献。
输入描述
若干组数据(大概5组)。每组数据第一行两个数n,m(1≤n,m≤1000且n+m为奇数)。接下来n行每行m个数ai,j(1≤ai,j≤100)描述这个矩阵。
输出描述
对于每组数据,输出一行表示答案。
输入样例
2 31 2 32 2 12 32 2 11 2 4
输出样例
48
画个图
令dp[i][j]表示当前走到第i,j个位置的最小贡献,我们可以假定(i+j)为奇数,由该状态可以转移向最多4个位置,就可以了。
做DP的时候心不要急,好好找找状态与转移方程即可!!!!!!!!
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>#include<stack>#include<map>using namespace std;typedef long long LL;int dp[1111][1111],a[1111][1111];const int inf=99999999;int main(){ int n,m,i,j; int t1,t2; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { for(j=1;j<=m;j++) scanf("%d",&a[i][j]); } for(i=0;i<=n;i++) { for(j=0;j<=m;j++) dp[i][j]=inf; } dp[1][1]=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++){ if((i+j)%2==0) continue; if(i==1) { if(j==2) dp[i][j]=a[i][j]*a[i][j-1]; else dp[i][j]=dp[i][j-2]+a[i][j]*a[i][j-1]; } else if(j==1) { if(i==2) dp[i][j]=a[i][j]*a[i-1][j]; else dp[i][j]=dp[i-2][j]+a[i][j]*a[i-1][j]; } else { t1=min(dp[i-1][j-1],dp[i][j-2])+a[i][j]*a[i][j-1]; t2=min(dp[i-1][j-1],dp[i-2][j])+a[i][j]*a[i-1][j]; dp[i][j]=min(t1,t2); } } } printf("%d\n",dp[n][m]); } return 0;}
0 0
- HDU 5569 矩阵的最小贡献 (DP)
- 矩阵的最小路径和 [DP]
- HDU 2604(矩阵 / DP)
- 解决github上贡献矩阵不显示自己的贡献
- HDU 4616 树形DP + 限制求最大贡献值的路
- hdu 4126(最小生成树+dp)
- HDU 3452 最小割 (树形dp)
- hdu 1559 最大子矩阵(DP)
- hdu 4328 最大子矩阵(DP)
- hdu 5001 walk (概率dp+矩阵)
- !HDU 1176--DP--(矩阵动规)
- hdu 2604 Queuing(矩阵优化DP)
- HDU-1176-免费馅饼【DP】(矩阵)
- HDU 1176(原来是矩阵dp)
- HDU 1559 最大子矩阵 (DP)
- hdu 6155(线段树+dp+矩阵)
- hdu 1505(矩阵dp)
- HDU 4126 Genghis Khan the Conqueror(树形dp,MST,破坏原有最小生成树边后的最小生成树代价)
- php隐藏图片地址一例
- 跟我一起写 Makefile(第一部分)
- POJ2985 The k-th Largest Group(平衡树查询第K大)
- C++继承类型:公有、保护、私有、虚拟
- 我的程序人生_杂谈 X86,WINDOWS,ARM,ANDROID
- HDU 5569 矩阵的最小贡献 (DP)
- 备份的重要性
- 内部类详解
- JQuery插件之select2
- 《Head First设计模式》学习总结
- HTML 基础标签demo
- POJ 3664 Election Time
- Jquery写级联菜单
- POJ3580 SuperMemo(区间树)