题目的意思是给你一个机器人,初始的时候在某一个给定的路灯位置,机器人要把路边所有的路灯关掉,每个路灯都有一个距离和一个功率,求要把所有的路灯关掉最小的最终能耗是多少?

题目是一个很明显的区间DP。可以这样考虑,机器人关掉一个区间的路灯后,一定停留在该区间的最左端或者最右端,而且必须包括起点,显然。

这样我们就可以区间dp了。

对于每一个含有初始位置的区间[i,j],只有两种位置使其最终的位置为j,那就是i和j-1。这样就得到了状态转移了。

接下来还有一个问题,就是怎么计算能耗呢?这样想,对于每个状态,表示关闭该区间的所有的灯后根据其所停留的位置,所有路灯的最小能耗总和。

所以我们可以对于每个路灯,用一个数组表示前面n个路灯的功耗总和,这样就可以dp了。

上代码:(效率还挺高的)

 #include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 1010
using namespace std; int f[][maxn][maxn],w[maxn],d[maxn],n,k,tep,tep1,tep2; int main()
{
while (scanf("%d",&n)!=EOF)
{
scanf("%d",&k);
for (int i=; i<=n; i++) scanf("%d%d",&d[i],&w[i]),w[i]+=w[i-];
memset(f,0x3f,sizeof f);
f[][k][k]=f[][k][k]=;
for (int i=k; i>; i--)
for (int j=k; j<=n; j++)
{
if (i==j) continue;
tep=w[n]-w[j]+w[i];
tep1=tep*(d[i+]-d[i])+f[][i+][j];
tep2=tep*(d[j]-d[i])+f[][i+][j];
f[][i][j]=min(tep1,tep2);
tep=w[n]-w[j-]+w[i-];
tep1=tep*(d[j]-d[j-])+f[][i][j-];
tep2=tep*(d[j]-d[i])+f[][i][j-];
f[][i][j]=min(tep1,tep2);
}
printf("%d\n",min(f[][][n],f[][][n]));
}
return ;
}

CSUOJ 1141——第四届河南省程序设计大赛的更多相关文章

  1. NYOJ--1236--挑战密室(第八届河南省程序设计大赛)

    挑战密室 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 R组织的特工Dr. Kong 为了寻找丢失的超体元素,不幸陷入WTO密室.Dr. Kong必须尽快找到解锁密 ...

  2. NYOJ-712 探寻宝藏(第六届河南省程序设计大赛)

    探 寻 宝 藏 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 传说HMH大沙漠中有一个M*N迷宫,里面藏有许多宝物.某天,Dr.Kong找到了迷宫的地图,他发现迷宫 ...

  3. 第八届河南省程序设计大赛-B.最大岛屿0000110011000000

    最大岛屿                                                                                           时间限制: ...

  4. nyoj170 网络的可靠性(第三届河南省程序设计大赛)

    题目170 题目信息 执行结果 pid=170" style="text-decoration:none; color:rgb(55,119,188)">本题排行 ...

  5. 河南省第四届ACM程序设计大赛

    A: 序号互换 #include <cstdio> #include <cstdlib> #include <cstring> #include <algor ...

  6. Distribution(F题)---第八届河南省程序设计大赛

    Description One day , Wang and Dong in the Dubai desert expedition, discovered an ancient castle. Fo ...

  7. nyoj 1239 引水project (河南省第八届acm程序设计大赛)

    题目1239 pid=1239" style="color:rgb(55,119,188)">题目信息 pid=1239" style="col ...

  8. nyoj1237 最大岛屿(河南省第八届acm程序设计大赛)

    题目1237 pid=1237" style="color:rgb(55,119,188)">题目信息 执行结果 本题排行 讨论区 最大岛屿 时间限制:1000 m ...

  9. nyoj 1238 最少换乘 (河南省第八届acm程序设计大赛)

    题目1238 题目信息 执行结果 本题排行 pid=1238" style="text-decoration:none; color:rgb(55,119,188)"&g ...

随机推荐

  1. 20155325 加分作业 实现pwd

    要求 1 学习pwd命令 2 研究pwd实现需要的系统调用(man -k; grep),写出伪代码 3 实现mypwd 4 测试mypwd 准备 思路 问题 1.如何获取当前目录的节点号 Linux ...

  2. QTC++监控USB插拔

    #if defined(Q_OS_WIN) #include <qt_windows.h> #include <QtCore/qglobal.h> #include <d ...

  3. c++中的stack实现

    通用.类型安全.模板 简直就是巧夺天工的例子

  4. new表达式,operator new和placement new介绍

    new/delete是c++中动态构造对象的表达式 ,一般情况下的new/delete都是指的new/delete表达式,这是一个操作符,和sizeof一样,不能改变其意义. new/delete表达 ...

  5. Two Sum - 新手上路

    不是计算机相关专业毕业的,从来没用过leetcode,最近在学习数据结构和算法,用leetcode练练手. 新手上路,代码如有不妥之处,尽管指出来. 今天抽空做的第一个题:Two Sum(最简单的呃呃 ...

  6. Spark任务执行期间写临时文件报错导致失败

    spark任务在执行期间,有时候会遇到临时目录创建失败,导致任务执行错误. java.io.IOException: Failed to create local dir in -- spark执行过 ...

  7. 高可用Kubernetes集群-5. 部署flannel网络

    七.部署flannel网络 kubernetes支持基于vxlan方式的flannel与weave网络,基于BGP路由的Calico网络,本节采用flannel网络. Flannel网络采用etcd等 ...

  8. pyextend库-accepts函数参数检查

    pyextend - python extend lib accepts(exception=TypeError, **types) 参数: exception: 检查失败时的抛出异常类型 **typ ...

  9. linux 的 awk 使用

    linux中awk命令对文本内容进行操作,其功能十分强大 1.如:查看一个有几百万行内容的文件中第3列数字内容(不重复) cat test.csv | awk -F ',' '{print $3}' ...

  10. ES6的新特性(4)——字符串的扩展

    字符串的扩展 ES6 加强了对 Unicode 的支持,并且扩展了字符串对象. 字符的 Unicode 表示法 JavaScript 允许采用\uxxxx形式表示一个字在\u0000~\uFFFF之间 ...