听说你会打地鼠(动态规划dp)
题目来源:https://biancheng.love/contest-ng/index.html#/41/problems
G 听说你会打地鼠
时间限制:300ms 内存限制:65536kb
题目描述
打地鼠是个很简单的游戏,不过你知道怎么打地鼠才能最省力吗?
每时刻,都有N只地鼠在pi(xi,yi)位置出现,打掉一只,该时刻其他地鼠会消失。
打掉第一只地鼠不消耗能量,之后每只地鼠消耗的能量约与鼠标移动距离成正比,即cost = dis(pi,pi+1)(平面上两点距离怎么求不多说了)
现在认为打第一只地鼠不消耗能量,那么打完所有地鼠消耗的最小能量是多少?
输入
多组测试数据
每组测试数据第一行两个整数为时长K和每时刻地鼠数量N
接下来N行每行2N个整数表示N只地鼠坐标
N<=100,K<40
输出
对于每组数据,输出一行,为最小消耗,结果保留3位小数
输入样例
2 2
1 1 3 4
2 2 5 3
输出样例
1.414
解题思路:
状态转移方程:
dp[k][i]=dp[k-1][j]+cost(p[k][i],p[k-1][j]);
说明:dp[k][j] 表示打第k层第j个的时候所能得到的最小值
给出代码:
#include <bits/stdc++.h>
#define INF 9999999999 using namespace std;
struct Point{
double x;
double y;
}; double cost(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
} Point p[][];
double dp[][];
int k,n,i,j,f;
double ans;
int main()
{
while(~scanf("%d%d",&k,&n))
{
ans=INF;
for(i=;i<k;i++)//k层
{
for(j=;j<n;j++)//n个
{
scanf("%lf%lf",&p[i][j].x,&p[i][j].y);//x表示层数,y表示第几个,因此p[x][y]可以确定所选择的地鼠层数以及在该层的位置
}
}
for(f=;f<k;f++)
{
for(i=;i<n;i++)
{
dp[f][i]=INF;
}
}
// memset(find_min,INF,sizeof(find_min));
for(f=;f<n;f++)
{
dp[][f]=;//第一只不需要消耗能量
}
for(f=;f<k;f++)//第f层
{
for(i=;i<n;i++)
{
for(j=;j<n;j++)
{
if(dp[f][i]>(dp[f-][j]+cost(p[f][i],p[f-][j])))//状态转移方程
dp[f][i]=dp[f-][j]+cost(p[f][i],p[f-][j]);//在第f层最小消耗能量等于在第f-1层打第j个地鼠+两点之间距离
}
}
}
for(i=;i<n;i++)
{
if(ans>dp[k-][i])
ans=dp[k-][i];
}
printf("%.3lf\n",ans);
}
}
推荐博客:http://www.tuicool.com/articles/QV7rQjZ
听说你会打地鼠(动态规划dp)的更多相关文章
- 动态规划dp
一.概念:动态规划dp:是一种分阶段求解决策问题的数学思想. 总结起来就一句话:大事化小,小事化了 二.例子 1.走台阶问题 F(10):10级台阶的走法数量 所以:F(10)=F(9)+F(8) F ...
- 算法-动态规划DP小记
算法-动态规划DP小记 动态规划算法是一种比较灵活的算法,针对具体的问题要具体分析,其宗旨就是要找出要解决问题的状态,然后逆向转化为求解子问题,最终回到已知的初始态,然后再顺序累计各个子问题的解从而得 ...
- Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)
题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...
- 【转】动态规划DP
[数据结构与算法] DP 动态规划 介绍 原创 2017年02月13日 00:42:51 最近在看算法导论. DP全称是dynamic programming,这里programming不是编程,是一 ...
- 动态规划DP的优化
写一写要讲什么免得忘记了.DP的优化. 大概围绕着"是什么","有什么用","怎么用"三个方面讲. 主要是<算法竞赛入门经典>里 ...
- hdu 1421:搬寝室(动态规划 DP + 排序)
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...
- hdu 2059:龟兔赛跑(动态规划 DP)
龟兔赛跑 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissi ...
- 动态规划DP入门
百度百科↓ 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman ...
- hdu 1087 Super Jumping! Jumping! Jumping!(动态规划DP)
Super Jumping! Jumping! Jumping!Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
随机推荐
- MongoDB的学习--文档的插入、删除和更新
最近在看<MongoDB权威指南>,写博客记录一下相关内容~~ 关于安装之类的最基本的就不多说了,从基本操作增删改查开始. MongoDB官网地址:http://www.mongodb.o ...
- 如何准备阿里社招面试,顺谈 Java 程序员学习中各阶段的建议
引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...
- Office Web Apps Server 概述
Office Web Apps Server 是新的 Office 服务器产品,它提供 Word.PowerPoint.Excel 和 OneNote 的基于浏览器的版本.单个 Office Web ...
- Windows7 x64 系统下安装 Nodejs 并在 WebStorm 9.0.1 下搭建编译 LESS 环境
1. 打开Nodejs官网http://www.nodejs.org/,点“DOWNLOADS”,点64-bit下载“node-v0.10.33-x64.msi”. 2. 下载好后,双击“node-v ...
- CentOS 7.2 MySQL 5.7 主从配置
MySQL的安装:CentOS 7.2 yum方式安装MySQL 5.7 两台服务器分别如下: Master:192.168.1.100 Slave:192.168.1.101 Master配置: 编 ...
- 使用WinDbg调试SQL Server查询
上一篇文章我给你介绍了WinDbg的入门,还有你如何能附加到SQL Server.今天的文章,我们继续往前一步,我会向你展示使用WinDbg调试SQL Server查询需要的步骤.听起来很有意思?我们 ...
- SQL 表变量和临时表
SQL 表变量和临时表 表变量:存储在内存中,作用域是脚本的执行过程中,脚本执行完毕之后就会释放内存,适合短时间内存储数据量小的数据集. 优点:使用灵活,使用完之后立即释放,不占用物理存储空间 缺点: ...
- 【推荐】oc解析HTML数据的类库(爬取网页数据)
TFhpple是一个用于解析html数据的第三方库,本人感觉功能还算可以,只不过在使用前必须配置项目. 配置 1.导入libxml2.tbd 2.设置编译路径 使用 这里使用一个例子来说明 http: ...
- mysql如何修改所有的definer
mysql中的definer是什么,有什么作用? 我们在mysql创建view.trigger.function.procedure.event时都会定义一个Definer=‘xxx’,类似如下: C ...
- AOP——代理技术
一.如何理解代理技术 Proxy:不用你去做,别人代替你去处理.如Windows快捷方式,又如房屋中介 起到一个中介作用,通过代理对象,可以去掉客户不能看到的内容和服务或者添加客户需要的额外服务. 二 ...