题意:

  给出每一个时刻地鼠出现的所有位置,问如果威威猫每一个时刻都可以打到一个地鼠的话(位置的变化会产生cost,在这道题中就是位置之间的相对距离),这样打下来最终的最小cost是多少。也可以转化成数塔问题,不过数塔问题这道题是求途径的cost最小值。
  状态转移方程:

// dp[i][j]表示走到第i层(在题目中对应第i个时刻)、第j个位置所得到的最小cost
// 下面式子的前提是has[i][j] == true && has[i][k] == true
dp[i][j] = min(dp[i][j], dp[i-1][k] + abs(j-k));

  需要注意的是,因为最终要求的是累加的最小cost,但是一开始的初始化工作是把dp所有位置设成最大值,所以如果没有一个“特殊位置的处理”的话,最终结果始终会很大。而这个所谓“特殊位置的处理”,就是把顶层的地鼠位置的代价设为0,因为题意也说了“打第一只地鼠无能量消耗”。

代码(15ms, 1852KB,可继续优化):

#include <iostream>
#include <fstream>
#include <cstring>      // memset
#include <cmath>        // abs
#include <algorithm>    // min
using namespace std;const int d2 = 22, d1 = 502, INF(0x3f3f3f3f);
int dp[d2][d1];
bool has[d2][d1];// 初始化全局变量
void init(int row) {// 会浪费很多时间么?这个简单的初始化能不能再优化? /*for (int i = 0; i <= row; ++i) {for (int j = 0; j < d1; ++j) {dp[i][j] = INF;has[i][j] = false;}}*/memset(has, false, sizeof has);memset(dp, 0x3f, sizeof dp);    // 一开始就赋以最大值
}int main() {
//  fstream cin("in.txt");int times, num;while (cin >> times >> num) {init(times);for (int i = 1; i <= times; ++i) {for (int j = 1; j <= num; ++j) {int tmp;cin >> tmp;has[i][tmp] = true; // 该位置上有地鼠 if (i == 1) {// 特殊的初始化 // 这是必须的,因为在数塔顶层打地鼠,代价为0// 也可以这样想,一开始dp数组设成最大值,而代价是累加的,如果没有特殊初始化,最终结果一定是很大的数字 dp[1][tmp] = 0;}}}for (int i = 2; i <= times; ++i) {for (int j = 1; j <= 500; ++j) {if (has[i][j]) {    // 走到这里 for (int k = 1; k <= 500; ++k) {    // 其实这里可以优化,毕竟距离相差最小的那个就可以了,不过代码要写长一点 if (has[i-1][k]) {  // 从这里出发 dp[i][j] = min(dp[i][j], dp[i-1][k] + abs(j - k));}}}}}int result(INF);for (int i = 1; i <= 500; ++i) {result = min(result, dp[times][i]);}cout << result << endl;}return 0;
}

hdoj4540 威威猫系列故事——打地鼠相关推荐

  1. HDU 4540 威威猫系列故事――打地鼠(DP)

    D - 威威猫系列故事――打地鼠 Time Limit:100MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Sub ...

  2. 动态规划位置hdu 4540 威威猫系列故事——打地鼠(动态规划)

    题记:写这篇博客要主是加深自己对动态规划位置的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 威威猫系列故事--打地鼠 Time Limit: 300/100 MS (Java/O ...

  3. 杭电acm 4540威威猫系列故事——打地鼠

    威威猫系列故事--打地鼠 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total ...

  4. HDU-4540 威威猫系列故事——打地鼠 (动态规划)

    威威猫系列故事--打地鼠                                                                             Time Limit: ...

  5. [HDOJ-4540]威威猫系列故事——打地鼠

    Problem Description 威威猫最近不务正业,每天沉迷于游戏"打地鼠". 每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作! ...

  6. 威威猫系列故事——打地鼠

    Problem Description 威威猫最近不务正业,每天沉迷于游戏"打地鼠". 每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作! ...

  7. HDU - 4540 威威猫系列故事——打地鼠

    威威猫最近不务正业,每天沉迷于游戏"打地鼠". 每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作! 无话可说... 我们知道,打地鼠是一款 ...

  8. HDU 4540 威威猫系列故事——打地鼠

    威威猫最近不务正业,每天沉迷于游戏"打地鼠". 每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作! 无话可说- 我们知道,打地鼠是一款经典 ...

  9. HDU-4540 威威猫系列故事——打地鼠

    威威猫最近不务正业,每天沉迷于游戏"打地鼠".  每当朋友们劝他别太着迷游戏,应该好好工作的时候,他总是说,我是威威猫,猫打老鼠就是我的工作!  无话可说...    我们知道,打 ...

最新文章

  1. linux 中samba账号登录密码,ubuntu下的Samba配置:使每个用户可以用自己的用户名和密码登录自己的home目录...
  2. 简述电子计算机的用途和特点_计算机基础试题及答案
  3. Servet映射规范翻译
  4. 《代码大全》阅读笔记02
  5. Android自己定义组件系列【4】——自己定义ViewGroup实现双側滑动
  6. 升级ubuntu后EMACS 无法使用
  7. Linux中的readelf命令
  8. 一个劣质无线鼠标接收器导致笔记本无线网络连接出现故障
  9. 社区送温暖!Unitimes携手环信新春送好礼
  10. 计算机顶会论文多少钱,计算机视觉顶会文章的解读汇总(CVPR/ECCV/ICCV/NIPS)
  11. java+英尺英寸,身高英寸换算(身高换算成英尺英寸)
  12. 游戏人机交互接口的设计
  13. 【Win32多线程】异步I/O技术(Overlapped I/O),避免使用多线程
  14. 加拿大曼尼托巴大学计算机专业几年,2020年加拿大曼尼托巴大学毕业时间是几月...
  15. 合宙ESP32S3 CameraWebServe 测试demo
  16. PHP志愿者协会报名系统的设计与实现 毕业设计-附源码201524
  17. GDUT_排位赛题解报告_第5场_A. 唯一排列
  18. 阿里妈妈广告源码示例
  19. “黑天鹅”与“灰犀牛”不能混为一谈,揭开数据保护的“隐秘角落”
  20. 4K高清修复,模糊视频4k修复是怎么实现的?

热门文章

  1. 李白:你的模型权重很不错,可惜被我没收了
  2. 散人霸业iOS客户端技术支持
  3. 华硕 X99 E WS 安装 macOS Sierra 10.12.4
  4. 前端实习生笔试_2015阿里巴巴前端实习生在线笔试题
  5. 社区共建合作须知:合作者实现美好的故事
  6. A One Smart 2.32版 皮肤检测仪安装包下载
  7. exe4j 关闭命令行窗口运行
  8. 【理财】基金投资基本入门知识(二)操作
  9. Mysql中if-else的使用
  10. GeoMAN: Multi-level Attention Networks for Geo-sensory Time Series Prediction