题目链接:https://www.luogu.com.cn/problem/P1220

本题涉及算法:区间DP。

我们一开始要做一些初始化操作,令:

  • \(p[i]\) 表示第i个路灯的位置;
  • \(w[i]\) 表示第i个路灯的功率;
  • \(sum[i]\) 表示前i个路灯的总功率

我们设状态 \(f[l][r][i]\) 表示:

  • 当 \(i=0\) 时,老张关了编号 \([l,r]\) 范围内的所有灯,并且此时老张在第 \(l\) 盏灯处(最左边)的最少消耗电量;
  • 当 \(i=1\) 时,老张关了编号\([l,r]\) 范围内的所有灯,并且此时老张在第 \(r\) 盏灯处(最右边)的最少消耗电量。

则我们可以得出状态转移方程如下:

\[f[l][r][0] = min(f[l+1][r][0] + (sum[l] + sum[n] - sum[r]) * (p[l+1] - p[l]), f[l+1][r][1] + (sum[l] + sum[n] - sum[r]) * (p[r] - p[l]))
\]

\[f[l][r][1] = min(f[l][r-1][0] + (sum[l-1] + sum[n] - sum[r-1]) * (p[r] - p[l]),f[l][r-1][1] + (sum[l-1] + sum[n] - sum[r-1]) * (p[r] - p[r-1]))
\]

实现代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 55;
int n, c;
long long p[maxn], // p[i]表示第i个路灯的位置
w[maxn], // w[i]表示第i个路灯的功率
sum[maxn], // sum[i]表示前i个路灯的总功率
f[maxn][maxn][2]; // f[l][r][0]表示关了[l,r]范围内的灯并且当前在l位置的最小功率;
// f[l][r][1]表示关了[l,r]范围内的灯并且当前在r位置的最小功率
const long long INF = (1LL<<60);
int main() {
cin >> n >> c;
for (int i = 1; i <= n; i ++) {
cin >> p[i] >> w[i];
sum[i] = sum[i-1] + w[i];
}
for (int i = 1; i <= n; i ++)
for (int j = i; j <= n; j ++)
f[i][j][0] = f[i][j][1] = INF;
f[c][c][0] = f[c][c][1] = 0; // 一开始在第c盏路灯不消耗电量
for (int len = 2; len <= n; len ++) {
for (int l = max(1, c-len+1); l+len-1 <= n; l ++) {
int r = l+len-1;
f[l][r][0] = min(f[l+1][r][0] + (sum[l] + sum[n] - sum[r]) * (p[l+1] - p[l]),
f[l+1][r][1] + (sum[l] + sum[n] - sum[r]) * (p[r] - p[l]));
f[l][r][1] = min(f[l][r-1][0] + (sum[l-1] + sum[n] - sum[r-1]) * (p[r] - p[l]),
f[l][r-1][1] + (sum[l-1] + sum[n] - sum[r-1]) * (p[r] - p[r-1]));
}
}
cout << min(f[1][n][0], f[1][n][1]) << endl;
return 0;
}

最新文章

  1. ASP.NET Core 中文文档 第三章 原理(8)日志
  2. PHP图片加文字水印和图片水印方法(鉴于李老师博客因没加水印被盗,特搜集的办法。希望能有用!)
  3. Python小练习五
  4. Android应用:横竖屏切换总结
  5. 用MathType编辑横三角形的方法
  6. Vim篇
  7. 不同浏览器对parseInt方法解析的不同
  8. javascript数组去重算法-----4
  9. 开源项目之Android Afinal框架
  10. Python--三元运算与lambda表达式
  11. Mysql中的in和find_in_set的区别?
  12. Asp.net MVC4高级编程学习笔记-视图学习第一课20171009
  13. Boost Coroutine2 - stackful coroutine简介
  14. 新概念英语(1-67)The weekend
  15. nginx正则匹配
  16. JetBrains系IDE的设置Pycharm PHPStorm
  17. [Swift]LeetCode309. 最佳买卖股票时机含冷冻期 | Best Time to Buy and Sell Stock with Cooldown
  18. kibana从入门到精通-Kibana安装
  19. $on在构造器外部添加事件(通过$emit进行外部调用)$once执行一次的事件(通过$emit进行外部调用)$off关闭事件
  20. ubuntu下安装、破解securtCRT工具

热门文章

  1. behavior planning——13. implement a cost function in C++
  2. SpringBoot 集成 Activiti 一路踩得坑
  3. 2019-8-31-jekyll-在博客添加流程图
  4. .net Framework 源代码 · ScrollViewer
  5. Python--day30--基于tcp协议的套接字socket
  6. 前端开发之HTML
  7. H3C DHCP特点
  8. 2019-4-10-win10-uwp-自定义标记扩展
  9. 【hdu 1850】Being a Good Boy in Spring Festival
  10. vue+element-ui实现分页