博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jzoj5453【NOIP2017提高A组冲刺11.5】好路线
阅读量:5088 次
发布时间:2019-06-13

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

nodgd在旅游。现在,nodgd要从城市的西北角走到东南角去。这个城市的道路并不平坦,nodgd希望找出一条相对比较好走的路。

nodgd事先已经得到了这个城市的地图。地图上这个城市是一个n×m的矩形,nodgd现在站在坐标为(1,1)的位置,需要到达坐标为(n,m)的位置。这张地图上用非负整数标记了每个整数坐标点的海拔,坐标为(x,y)的位置的海拔是h(x,y)。nodgd希望找出一条路线,路线中任意时刻都在向正东或向正南走,而且只在整数坐标点的地方转弯,使得路上经过的n+m−1个整数坐标点的海拔的方差最小。然而万能的nodgd当然知道该怎么走,也当然知道方差最小是多少,只是想顺便考考你。
假如有k个实数x1,x2,…,xk,则平均值x'定义为Σxi/k 
方差q^2定义为Σ(x'-xi)^2/k

在本题中为了方便,你只需要求出(n+m−1)^2×q^2的最小值即可,众所周知这是个整数。

对于30%的数据,1≤n,m≤10;

对于50%的数据,1≤n,m≤20;
对于100%的数据,1≤n,m≤50,0≤h(n,m)≤50。

今天题目最水的一道

第三题的树hash打挂了,第一题看错题(好多人看错了,100000级别的最大团?!)

好先来说说这道题

我们发现式子可以化简为(n+m-1)*Σxi^2-(Σxi)^2

考虑到(Σxi)很小,可以丢入dp状态中

设f[i][j][k]表示做到i,j这个点,(Σxi)为k的情况,(n+m-1)*Σxi^2的最小值

那么答案为min{f[n][m][k]-k^2}

#include
#include
#include
#define LL long longusing namespace std;int n,m,v[60][60],c;LL f[2][60][5010],res=1ll<<60;inline LL sqr(int x){ return x*x; }int main(){ freopen("route.in","r",stdin); freopen("route.out","w",stdout); memset(f,0x63,sizeof f); scanf("%d%d",&n,&m); c=n+m-1; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) scanf("%d",v[i]+j); f[1][1][v[1][1]]=sqr(v[1][1])*c; for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) if(i>1 || j>1) for(int k=5000;k>=v[i][j];--k) f[i&1][j][k]=min(f[~i&1][j][k-v[i][j]],f[i&1][j-1][k-v[i][j]])+sqr(v[i][j])*c; for(int k=5000;k>=v[n][m];--k) res=min(res,f[n&1][m][k]-sqr(k)); printf("%d\n",res);}

转载于:https://www.cnblogs.com/Extended-Ash/p/9477241.html

你可能感兴趣的文章
安卓学习资料推荐-25
查看>>
Mysql数据库备份和还原常用的命令
查看>>
关于退出当前页面在火狐的一些问题
查看>>
【项目实施】项目考核标准
查看>>
spring-aop AnnotationAwareAspectJAutoProxyCreator类
查看>>
经典入门_排序
查看>>
Redis Cluster高可用集群在线迁移操作记录【转】
查看>>
二、spring中装配bean
查看>>
VIM工具
查看>>
javascript闭包
查看>>
@Column标记持久化详细说明
查看>>
创建本地yum软件源,为本地Package安装Cloudera Manager、Cloudera Hadoop及Impala做准备...
查看>>
mysql8.0.13下载与安装图文教程
查看>>
站立会议08(冲刺2)
查看>>
url查询参数解析
查看>>
http://coolshell.cn/articles/10910.html
查看>>
[转]jsbsim基础概念
查看>>
DIV和SPAN的区别
查看>>
第一次使用cnblogs
查看>>
C#语法糖之 session操作类 asp.net
查看>>