题目有点难描述,内容请直接看原题。。

题解:

可以发现人在关路灯时无论走什么样的路径,从宏观上来看被关的灯总是构成一段包含初始点的连续区间。比如要关掉下标为 l (l < st)的灯,则一定要先关掉下标为 l+1 的灯,可以发现这应该是一个区间dp的题目。有了区间之外,还要记录的信息是对于区间 [l,r],老张在区间的哪个端点处,因此 dp[l][r][0/1] 表示区间 [l,r] 内的路灯已经都被关闭,且老张在左端点/右端点处的最小功率消耗是多少,转移方程在代码中给出,时间复杂度为 \(O(n^2)\)。

代码如下

#include <bits/stdc++.h>
using namespace std;
const int maxn=51;
typedef long long LL; int n,st;
LL pos[maxn],w[maxn],sum[maxn];
LL dp[maxn][maxn][2];// 0 -> left 1 -> right void read_and_parse(){
scanf("%d%d",&n,&st);
for(int i=1;i<=n;i++){
scanf("%lld%lld",&pos[i],&w[i]);
sum[i]=sum[i-1]+w[i];
}
}
void solve(){
memset(dp,0x3f,sizeof(dp));
dp[st][st][0]=dp[st][st][1]=0;
for(int len=1;len<=n;len++){
for(int i=0;i<=min(len,st-1);i++){
int l=st-i,r=st+len-i;
if(r>n)continue;
dp[l][r][0]=min(dp[l+1][r][0]+(pos[l+1]-pos[l])*(sum[l]+sum[n]-sum[r]),dp[l+1][r][1]+(pos[r]-pos[l])*(sum[l]+sum[n]-sum[r]));
dp[l][r][1]=min(dp[l][r-1][0]+(pos[r]-pos[l])*(sum[l-1]+sum[n]-sum[r-1]),dp[l][r-1][1]+(pos[r]-pos[r-1])*(sum[l-1]+sum[n]-sum[r-1]));
}
}
printf("%lld\n",min(dp[1][n][0],dp[1][n][1]));
}
int main(){
read_and_parse();
solve();
return 0;
}

【洛谷P1220】关路灯的更多相关文章

  1. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  2. 洛谷P1220 关路灯

    洛谷1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关 ...

  3. 洛谷——P1220 关路灯

    P1220 关路灯 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉 ...

  4. 洛谷P1220 关路灯(区间dp)

    关路灯 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯.为了给村里节 ...

  5. 洛谷P1220 关路灯 题解 区间DP

    题目链接:https://www.luogu.com.cn/problem/P1220 本题涉及算法:区间DP. 我们一开始要做一些初始化操作,令: \(p[i]\) 表示第i个路灯的位置: \(w[ ...

  6. 洛谷P1220关路灯[区间DP]

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  7. 洛谷P1220关路灯[区间DP 提前计算代价]

    题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村 ...

  8. 洛谷P1220 关路灯【区间dp】

    题目:https://www.luogu.org/problemnew/show/P1220 题意:给定n盏灯的位置和功率,初始时站在第c盏处. 关灯不需要时间,走的速度是1单位/秒.问把所有的灯关掉 ...

  9. 洛谷—— P1220 关路灯

    https://www.luogu.org/problem/show?pid=1220 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住 ...

  10. 洛谷 P1220 关路灯 (贪心+区间dp)

    这一道题我一直在想时间该怎么算. 看题解发现有个隐藏的贪心. 路径一定是左右扩展的,左右端点最多加+1(我竟然没发现!!) 这个性质非常重要!! 因此这道题用区间dp f[i][j]表示关完i到j的路 ...

随机推荐

  1. Jmeter(十二)响应断言之响应文本和响应信息的差别

    在Jmeter的后置处理器中添加响应断言, 要测试的响应字段中有两个很难区分的选项, 响应文本和响应信息. 我做了两个小实验来进行区别. 1. 用Fiddler捕捉了一个POST请求, 其响应是suc ...

  2. Python学习笔记:MySQL数据库连接和使用

    一.安装pymysql插件 直接在pycharm中安装即可. 二.使用 1.数据库插入操作 insert 注意: insert语句需要提交,使用commit() 如果报错,需要回滚.使用rollbac ...

  3. Wireshark 学习笔记 Lebal:Research

    学习Wireshark主要是为了契合我最近做的线性激光雷达项目,主要用于抓取数据包 首先是三本书比较值得一看,第一本是清华大学出版社的,侧重教学,第二三两本是人民邮电出版社的,其中第二本是许多课程的指 ...

  4. C# 虚拟键盘

    [DllImport("user32.dll")] public static extern void keybd_event(byte bVk, byte bScan, uint ...

  5. jeecms v9图标不显示问题

  6. js移动端滑动效果

    移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...

  7. iOS发版出现“No iTunes Connect access for the team”的问题的解决方式

    要发个新版本,结果发现,老是提示我“No iTunes Connect access for the team”,出现以下错误:   图1 错误提示: No accounts with iTunes ...

  8. 从“int中提取高八位”开始的学习

    今天有个学弟问了一个问题,怎么提取int中的高八位. 这个是个非常基础的问题,随便用位运算瞎搞几下就出来了. 看到这个问题的时候,也不知道我当初想了些啥,想了个骚操作,用memcpy把int放到字符串 ...

  9. javascript 数据类型之数值转换

    数值转换 一.有3个函数可以把非数值转换为数值: Number() parse Int() parse Float() 说明: 1.Number()可以用于任何数据类型,强转类型,如果不能把指转成数值 ...

  10. qt 两种按钮点击事件应用

    1.传统connect 例如: connect(ui->findPushBtn,SIGNAL(clicked()),this,SLOT(find())); 参数1:事件UI 参数2:点击系统函数 ...