博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5492 Find a path
阅读量:4485 次
发布时间:2019-06-08

本文共 1712 字,大约阅读时间需要 5 分钟。

题意:

在一张N*M的图上,每个点都有权值,寻找一条从(1,1)到(n,m)的路径,使得

(n+m-1)*sigma(Ai-Aavg)最小

其中Aavg是路径上Ai的平均数

 

题解

看题目是一个DP,但是路径平均值得存在使得状态很难定义。

所以我们进行变形,将和式展开之后,得到ans=(n+m-1)*S1-S2;

其中S1是路径上所有数的平方和,S2为路径上数的和的平方。

也就是要求S1最小的同时S2最大。

dp[i][j][s]表示到达(i,j)时平方和为s时和的的最小值,答案通过枚举所有s取得

 

#include
#define clr(x,y) memset((x),(y),sizeof(x))using namespace std;typedef long long LL;const int maxn=30;const int inf=1e8;int mp[maxn+5][maxn+5];int dp[maxn+5][maxn+5][2*maxn*maxn+5];int n,m;void solve(int iCase){ scanf("%d%d",&n,&m); for (int i=1;i<=n;++i) { for (int j=1;j<=m;++j) { scanf("%d",&mp[i][j]); } } for (int i=1;i<=n;++i) for (int j=1;j<=m;++j) for (int k=0;k<=2*maxn*maxn;++k) dp[i][j][k]=inf; dp[1][1][mp[1][1]]=mp[1][1]*mp[1][1]; for (int i=1;i<=n;++i) { for (int j=1;j<=m;++j) { if (i==1 && j==1) continue; for (int k=0;k<=2*maxn*maxn;++k) { if (i-1>=1 && k>=mp[i][j]) dp[i][j][k]=min(dp[i][j][k],dp[i-1][j][k-mp[i][j]]+mp[i][j]*mp[i][j]); if (j-1>=1 && k>=mp[i][j]) dp[i][j][k]=min(dp[i][j][k],dp[i][j-1][k-mp[i][j]]+mp[i][j]*mp[i][j]); } } } int ans=inf; for (int k=0;k<=2*maxn*maxn;++k) { if (dp[n][m][k]==inf) continue; int tmp=(n+m-1)*dp[n][m][k]-k*k; ans=min(ans,tmp); } printf("Case #%d: %d\n",iCase,ans);}int main(void){ #ifdef ex freopen ("../in.txt","r",stdin); //freopen ("../out.txt","w",stdout); #endif int T; scanf("%d",&T); for (int i=1;i<=T;++i) { solve(i); }}

 

转载于:https://www.cnblogs.com/123-123/p/5862468.html

你可能感兴趣的文章
ispy 编译笔记
查看>>
bzoj1067——SCOI2007降雨量(线段树,细节题)
查看>>
day 1
查看>>
洛谷P1282 多米诺骨牌【线性dp】
查看>>
数据类型的提升(promotion)
查看>>
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
查看>>
Python中的生成器与yield
查看>>
JQuery 的Bind()事件
查看>>
Maven 常用配置
查看>>
Objects源码解析
查看>>
video
查看>>
栈的c语言顺序实现(动态申请空间)
查看>>
【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
查看>>
获取子iframe框架的元素
查看>>
WordCount bug修复录
查看>>
承载进程 (vshost.exe)
查看>>
[转]WPF MVVM 实战
查看>>
[转载] Python 标准库 urllib2 的使用细节
查看>>
Silverlight使用DataGrid的模板列(DataGridTemplateColumn)实现类似TreeListView控件的效果
查看>>
Java学习——Applet写字符串(调字体)
查看>>