双进程dp需要练习

【问题描述】

某特种部队接到一个任务,需要潜入一个仓库。该部队士兵分为两路,第一路士兵已经在正面

牵制住了敌人,第二路士兵正在悄悄地从后方秘密潜入敌人的仓库。

当他们到达仓库时候,发现这个仓库的锁是一把很诡异的电子锁,上面是一排按钮,每个按钮

上都有一个数字……10秒钟后,总部返回了该锁的技术信息。要解开这把锁,首先要从左边的第

一个按钮开始向右按动,中间可以跳过某些按钮,按动到最右边的按钮后,反向向左按动。最终,

每个按钮都要按且仅按一次。每两个相邻按钮上数字之差的总和的最小值,便是解开这把锁的密码。

作为一支装备精良的特种部队,必须要在最短的时间内完成任务,解开这把锁,潜入仓库。

【输入文件】

输入文件force.in 第一行是一个n(2 <= n <= 1000)表示共有n个按钮。

第二行是n个正整数,代表从左至右各按钮上的数字,数值均不超过2000。

【输出文件】

输出文件force.out只有一个数,为这把锁的密码。

【输入样列】

5

1 2 3 4 5

【输出样列】

4

program force;
var
  cost,f:array[0..1001,0..1001] of longint;
  a:array[0..1001] of longint;
  n,ans:longint;

procedure init;
var i:longint;
begin
  assign(input,'force.in');reset(input);
  assign(output,'force.out');rewrite(output);
  fillchar(a,sizeof(a),0);
  ans:=100000000;
  readln(n);
  for i:=1 to n do read(a[i]);
end;

function min(a1,a2:longint):longint;
begin
  if (a1>a2) then exit(a2) else exit(a1);
end;

procedure main;
var i,j:longint;
begin
  for i:=0 to n do begin        // ※ 小技巧 1只能取一次所以可以增加一个点0 但是从0跳到其他地方的权值都是0!

cost[0,i]:=0;
    cost[i,0]:=0;
  end;
  for i:=1 to n do
    for j:=1 to n do begin
      if i=j then continue;
      cost[i,j]:=abs(a[i]-a[j]);
    end;
  fillchar(f,sizeof(f),$7);
  f[0,0]:=0;
  for i:=0 to (n-1) do
    for j:=i to n do begin
      f[i,j+1]:=min(f[i,j+1],f[i,j]+cost[j+1,j]);
      f[j,j+1]:=min(f[j,j+1],f[i,j]+cost[j+1,i]);         //从我设置的状态来看 都是小的在前面大的在后面 所以从i跳到j+1就变成了[j,j+1]
    end;
  for i:=1 to n do if (ans>f[i,n]) then ans:=f[i,n]+cost[i,n];
  writeln(ans);
end;

procedure terminate;
begin
  close(input);close(output);
end;

begin
  init;
  main;
  terminate;
end.

转载于:https://www.cnblogs.com/ushiojamie/archive/2011/10/21/2220762.html

特种部队【动态规划】相关推荐

  1. 伍六七带你学算法 动态规划 ——不同路径

    力扣 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格 ...

  2. 由动态规划计算编辑距离引发的思考

    简单介绍 编辑距离算法: https://www.cnblogs.com/BlackStorm/p/5400809.html https://wizardforcel.gitbooks.io/the- ...

  3. LeetCode 10. Regular Expression Matching python特性、动态规划、递归

    前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...

  4. 【动态规划】Part1

    1. 硬币找零 题目描述:假设有几种硬币,如1.3.5,并且数量无限.请找出能够组成某个数目的找零所使用最少的硬币数. 分析:   dp [0] = 0            dp [1] = 1 + ...

  5. 2016.4.2 动态规划练习--讲课整理

    1.codevs1742 爬楼梯  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 小明家外面有一个长长的楼梯,共N阶.小明的腿 ...

  6. 算法设计与分析第4章 动态规划(二)【DP序列问题】

    第3章 动态规划(二)[DP序列问题] 3.2 DP序列问题 (51nod的动态规划教程很不错,讲解很详细,以下分析来自51nod) 1.矩阵取数问题 给定一个m行n列的矩阵,矩阵每个元素是一个正整数 ...

  7. 算法设计与分析第4章 动态规划(一)【背包问题】

    第3章动态规划(一)[背包问题] 基本思想: 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常只有多项式量级.在用 ...

  8. ADPRL - 近似动态规划和强化学习 - Note 7 - Approximate Dynamic Programming

    Note 7 - 近似动态规划 Approximate Dynamic Programming 7. 近似动态规划 (Approximate Dynamic Programming) 7.1 近似架构 ...

  9. ADPRL - 近似动态规划和强化学习 - Note 6 - Mitigating the Curse of Dimensionality

    Note 6 Mitigating the Curse of Dimensionality 减轻维度诅咒 6. Mitigating the Curse of Dimensionality 减轻维度诅 ...

最新文章

  1. JAVA面向对象-----final关键字
  2. js算法入门(3)--递归
  3. 深入推荐引擎相关算法 - 聚类
  4. VistaDB 数据库,.NET的新选择
  5. dnf时装预览怎么打开_DNF最疯狂的年代,纯色天空整套白给,“神话”宠物不卖只送...
  6. java 链表逆转_java 实现单链表逆转详解及实例代码
  7. python实现洗牌算法_【Python】洗牌算法及 random 中 shuffle 方法和 sample 方法浅析...
  8. 软件运行 计算机硬件环境,软件运行环境该怎么写
  9. k2p 登录路由器shell失败_斐讯路由器无法进入路由器登录管理界面怎么办
  10. oracle hint firstrow,stored outlines迁移成SQL执行计划基线
  11. 跟着示例学Ubuntu UFW防火墙设置
  12. 来吧 带你玩转 Excel VBA
  13. Linux挂载移动群晖硬盘,通过USB移动硬盘盒挂载群晖格式硬盘的方法
  14. laravel 发送邮件随记
  15. HTTP 请求是什么?
  16. kmcuda: GPU加速 Kmeans
  17. c++学习六(静态成员和友员函数)
  18. 未动科技与地平线达成战略合作,共推全场景智能驾驶加速落地
  19. Nature综述:肠道菌群与结直肠癌的研究进展
  20. MyBatis研习录(09)——MyBatis一对多查询

热门文章

  1. Hadoop学习笔记—1.基本介绍与环境配置
  2. [NOIp 2013]货车运输
  3. JAR文件——2017.08.04
  4. 2017.4.14-afternoon
  5. 20160808_安装JDK7u79
  6. 产品设计 | 价格理论与用户体验
  7. SEM那些被人混淆的事儿(已完结)
  8. 大数据时代,如何让个人信息不再“裸奔”?
  9. 笔试题目“检测IPv4地址”的实现
  10. 在50亿信息泄露事件面前,Struts 2 漏洞和CIA泄密都是小事 | 宅客周刊