题目

题目描述
宁智贤得到了一份有趣而高薪的工作。每天早晨她必须关掉她所在村庄的街灯。所有的街灯都被设置在一条直路的同一侧。 宁智贤每晚到早晨5点钟都在晚会上,然后她开始关灯。开始时,她站在某一盏路灯的旁边。 每盏灯都有一个给定功率的电灯泡,因为宁智贤有着自觉的节能意识,她希望在耗能总数最少的情况下将所有的灯关掉。 宁智贤因为太累了,所以只能以1m/s的速度行走。关灯不需要花费额外的时间,因为当她通过时就能将灯关掉。 编写程序,计算在给定路灯设置,灯泡功率以及宁智贤的起始位置的情况下关掉所有的灯需耗费的最小能量。
输入格式
第一行包含一个整数N,2≤N≤1000,表示该村庄路灯的数量。
第二行包含一个整数V,1≤V≤N,表示宁智贤开始关灯的路灯号码。
接下来的N行中,每行包含两个用空格隔开的整数D和W,用来描述每盏灯的参数,其中0≤D≤1000,0≤W≤1000。
D表示该路灯与村庄开始处的距离(用米为单位来表示),W表示灯泡的功率,即在每秒种该灯泡所消耗的能量数。路灯是按顺序给定的。
输出格式
第一行即唯一的一行应包含一个整数,即消耗能量之和的最小值。

题解

说实话,这道区间DP拿到手想了四十分钟一点思路都没有……看的题解才写出来的。。
这道题目要做的第一步是把所有的灯按照坐标进行排序
然后设出状态, f[i][j] f [ i ] [ j ] f[i][j]代表把第 i i i盏灯到第j'>jjj栈灯全部关闭的最小消耗。
但是问题出现了,我们发现对于一个区间 [i,j] [ i , j ] [i,j],我们从 i i i走到j'>jjj的消耗和从 j j j走到i'>iii的消耗是不一样的,所以我们新开一维, f[i][j][1] f [ i ] [ j ] [ 1 ] f[i][j][1]代表从左走到右边, f[i][j][0] f [ i ] [ j ] [ 0 ] f[i][j][0]代表从右走到左边。
对于 f[i][j] f [ i ] [ j ] f[i][j],我们只能从左边或者右边递推而来,也就是从 f[i][j−1] f [ i ] [ j − 1 ] f[i][j-1]或者 f[i+1][j] f [ i + 1 ] [ j ] f[i+1][j]推来。

code

#include<bits/stdc++.h>
using namespace std;
inline int read()
{int num = 0;char c = ' ';bool flag = true;for(;c > '9' || c < '0';c = getchar())if(c == '-')flag = false;for(;c >= '0' && c <= '9';num = num*10+c-48,c=getchar());return flag ? num : -num;
}
const int maxn=1020;
int n,begining,P[maxn],sum[maxn][maxn];
//P是a[].power的前缀和
//sum[i][j]代表除去[i,j]的灯后的功率和
struct light
{int direct,power;
}a[maxn];
bool mycmp(light a,light b)
{return a.direct<b.direct;
};
void init()
{n=read();begining=read();for(int i=1;i<=n;i++){a[i].direct=read();a[i].power=read();}sort(a+1,a+1+n,mycmp);//排序 for(int i=1;i<=n;i++)P[i]=P[i-1]+a[i].power;//前缀和 for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)sum[i][j]=P[n]+P[i-1]-P[j];
}
int f[maxn][maxn][2];
void DP()
{memset(f,10,sizeof f);f[begining][begining][1]=f[begining][begining][0]=0;for(int len=2;len<=n;len++)for(int i=1;i+len-1<=n;i++){int j=i+len-1;int t1,t2;t1=f[i+1][j][0]+(a[i+1].direct-a[i].direct)*sum[i+1][j];t2=f[i+1][j][1]+(a[j].direct-a[i].direct)*sum[i+1][j];f[i][j][0]=min(t1,t2);t1=f[i][j-1][0]+(a[j].direct-a[i].direct)*sum[i][j-1];t2=f[i][j-1][1]+(a[j].direct-a[j-1].direct)*sum[i][j-1];f[i][j][1]=min(t1,t2);//这部分画个图就能理解了 }printf("%d\n",min(f[1][n][0],f[1][n][1]));
}
int main()
{init();DP();return 0;
}

HLOJ434 关灯相关推荐

  1. “偷懒”上热搜!南京大三学生自制宿舍关灯神器火了,网友:希望量产

    金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 宿舍关灯这件事情,最近比较火. 起因是一位南京信息工程大学大三学生,花了7.8天时间,自制了一款宿舍关灯神器. 效果是这样的. 点击一下手机 ...

  2. html5实现关灯效果,《第41天:JQurey - 关灯效果》

    今天要和你们分享的是我看了JQuery库的一款关灯效果,然后自已去实现它. 主要是鼠标移入移出它的状态发生改变 开始讲解前,为大家做一些知识储备,在接下来的实操中会用到. 1.mouseover( f ...

  3. 科普丨关灯玩手机,危害到底有多大?如何科学用眼?

    智能手机已经深深的植入我们的生活 甚至有人说手机已经成了我们身体的一个器官 无时无刻不贴着我们 玩游戏.刷朋友圈.看视频-- 如果关灯玩手机有多大的危害?有可能真的会瞎吗?跟润森了解下 关灯后玩手机会 ...

  4. 1364: 开灯与关灯(深入思考问题更妙哦~~)

    1364: 开灯与关灯 时间限制: 1 Sec 内存限制: 128 MB [提交][状态][讨论版] 题目描述 有一个叫做Mabu的人在大学的走廊里面反复开灯和关灯.每个灯泡都有各自的开关,如果灯是关 ...

  5. 关灯看视频(Turn Off the Lights)

    插件介绍 随着使用互联网的人越来越多在网络上看视频已是常事一些相关的软件就运应而生今天为大家推荐一个能够提高用户们看视频体验的插件.关灯看视频Turn Off the Lights观看视频时自动调暗页 ...

  6. D. 关灯问题(规律或二分)

    题目描述 今年就这么结束了, zdw感到十分失望 蓝桥杯写错签到题, cf rating狂掉, 最后区域赛打铜, 还突然变成JBer了 失落的zdw准备睡觉(真咸鱼), 他想关灯, 然而发现开关坏了 ...

  7. 【期望】关灯游戏(金牌导航 期望-8)

    关灯游戏 金牌导航 期望-8 题目大意 有n盏灯,有些是亮的,有的是暗的,现在如果按一个位置的开关,那么是它因数的位置的灯都会改变开关情况,现在如果用k步不能直接关完,就随机按,直到可以k步关完,就用 ...

  8. 洛谷P2622 关灯问题II【状压dp+bfs】

    P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮.每个按钮可以同时控制这n盏灯--按下了第i个按钮,对于所有的灯都有一个效果.按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j] ...

  9. 开灯关灯java script_Jquery实现视频播放页面的关灯开灯效果

    本示例使用Jquery实现视频播放页面的关灯开灯效果.其中视频显示使用embed 元素,该元素是html5的元素,所以使用支持html5的浏览器效果会更好. 效果预览网址:http://www.kel ...

最新文章

  1. 2012-09-10 23:30 如何解决HtmlAgilityPack得到的InnerText中有残留的script、样式的问题...
  2. 广东高院驳回快播对深圳市场监管局2.6亿罚款案上诉
  3. 首个开源 Linux 系统登陆火星,占有率超 Windows,一同登录还有一款安卓手机芯片...
  4. 深入了解Struts2返回JSON数据的原理及具体应用范例
  5. Bootstrap Magic – 轻松创建自己的 Bootstrap 主题
  6. mysql创建视图不允许子查询
  7. 直接用自己服务器做图床可以吗_图床趣事
  8. ad采样信噪比与噪声_在AD转换中的过采样和噪声形成
  9. UBUNTU上新建GIT库
  10. Install deepin-wine QQ inside a docker image in Ubuntu 20.04
  11. ionic 插件安装
  12. 智能颈部按摩仪低频脉冲电流产生以及会对人体有何影响
  13. 【转载】Android 第三方ROM定制之适配谷歌Play Store
  14. Web前端优化最佳实践及工具集锦(如减少页面加载时间)
  15. pe备份linux系统教程,如何使用老毛桃winpe的Bootice工具备份SYSLINUX引导程序?
  16. 新星计划 Electron+vue2 桌面应用 2 搭建及运行
  17. 获取DirectX内部版本号
  18. Viso制作各种顺序结构流程图(具体步骤含实例)
  19. ADBFastboot常用命令
  20. UG锌合金五金压铸模具设计分模排位详细视频教程

热门文章

  1. Python 根据Excel数据源批量自动填写Excel模板
  2. 如何将编码转为自己想要的编码 -- gbk utf-8
  3. 【专项测试】切流量测试
  4. 分治算法——汉诺塔(HanoiTower)
  5. 铣削加工表面的形成取决于什么?
  6. 【学习笔记】大数据技术之Hive(下)
  7. JAVA 获取今天,7天前,一个月前,今年起始日期,同比日期 各种时间段的方法归结
  8. 计算机毕业设计之java+springboot基于vue的游戏攻略分享平台
  9. 写作是人生最大的杠杆
  10. 消防设施操作员要进行再教育?最新高级消防设施操作员模拟真题及答案