HDU5492 Find a path DP
2015-09-29 20:26
316 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5492
题目大意:一个n*m的图,每个节点有一个不大于30的权值A,要从(1,1)点走到(n,m)点,每次只能向下或向右走,问表达式(n+m-1)*∑(Ai-Aave)^2最小是多少。
分析:将表达式展开可以化简可得:(n+m-1)*∑Ai^2-(∑Ai)^2,我们用dp(i,j,k)来表示序列和为k时,序列的平方和的最小值,那么显然第一项(即dp(0,0,A[0,0]))为A[0,0]^2,对于向下走的情况,如果走下一个点,那么dp(i+1,j,k+A[i+1,j])=dp(i,j,k)+A[i+1,j]^2;如果不走下一个点,那么dp(i+1,j,k+A[i+1,j])保留原值不变,这样我们就得到了状态转移方程:dp[i+1][j][
k+maze[i+1][j] ]=min(dp[i+1][j][ k+maze[i+1][j] ],dp[i][j][k]+maze[i+1][j]*maze[i+1][j])。
实现代码如下:
题目大意:一个n*m的图,每个节点有一个不大于30的权值A,要从(1,1)点走到(n,m)点,每次只能向下或向右走,问表达式(n+m-1)*∑(Ai-Aave)^2最小是多少。
分析:将表达式展开可以化简可得:(n+m-1)*∑Ai^2-(∑Ai)^2,我们用dp(i,j,k)来表示序列和为k时,序列的平方和的最小值,那么显然第一项(即dp(0,0,A[0,0]))为A[0,0]^2,对于向下走的情况,如果走下一个点,那么dp(i+1,j,k+A[i+1,j])=dp(i,j,k)+A[i+1,j]^2;如果不走下一个点,那么dp(i+1,j,k+A[i+1,j])保留原值不变,这样我们就得到了状态转移方程:dp[i+1][j][
k+maze[i+1][j] ]=min(dp[i+1][j][ k+maze[i+1][j] ],dp[i][j][k]+maze[i+1][j]*maze[i+1][j])。
实现代码如下:
#include <cstdio> #include <cstring> using namespace std; #define INF 0x3f3f3f3f int maze[30][30]; int dp[30][30][1800]; int min(int a,int b) { return a<b?a:b; } int main() { int t,T=1,m,n; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&maze[i][j]); memset(dp,INF,sizeof(dp)); dp[0][0][ maze[0][0] ]=maze[0][0]*maze[0][0]; for(int i=0;i<n;i++) for(int j=0;j<m;j++) { if(i+1<n) { for(int k=0;k<=59*30;k++) if(dp[i][j][k]!=INF) dp[i+1][j][ k+maze[i+1][j] ]=min(dp[i+1][j][ k+maze[i+1][j] ],dp[i][j][k]+maze[i+1][j]*maze[i+1][j]); } if(j+1<m) { for(int k=0;k<=59*30;k++) if(dp[i][j][k]!=INF) dp[i][j+1][ k+maze[i][j+1] ]=min(dp[i][j+1][ k+maze[i][j+1] ],dp[i][j][k]+maze[i][j+1]*maze[i][j+1]); } } int ans=INF; for(int i=0;i<=59*30;i++) if(dp[n-1][m-1][i]!=INF) ans=min(ans,(n+m-1)*dp[n-1][m-1][i]-i*i); printf("Case #%d: %d\n",T++,ans); } return 0; }
相关文章推荐
- 编程之美
- 前端开发工程师应该关注什么?
- 导航地图4_地理编码和反编码
- Arduino debug 实时单步调试.
- DevOps实战:Graphite监控上手指南
- hdu 5491 The Next(ICPC合肥赛)
- 2016华为上机题二(数字频率)
- 设置默认登陆账户
- mysql同一个表和不同表的一列复制到另一列的方法
- Crazy English on the road
- Jquery datatable jsonp 显示后台json数据
- 成员对象
- 第一次上台讲课的感受
- JdbcHelper.java(JAVA连接数据库后的备忘录的增删改查)
- Xcode 7.0 更新后 网络请求 友盟关于iOS9的一些修改
- bzoj1628: [Usaco2007 Demo]City skyline(单调队列)
- 观察者模式
- Unity3D中的一些Atrribute
- android 按两次返回键退出
- 概率论~泊松分布