nyoj 304(区间dp)
解题思路:这道题很明显是用区间dp,可是与以往的区间dp不同,因为对于区间[i,j],机器人所处的位置要么在i,要么在j(因为机器人要移动到某一点才能关闭灯泡,所以对于某一段区间来说,机器人最后肯定在两个端点上,否则将不能成立),那么既然要表示在左端点还是右端点,所以我们再开三维数组dp[i][j][0]表示停留在i点,dp[i][j][1]表示停留在j点,那么剩下的就是状态方程了,跟普通的区间dp一样,很容易写出来。。具体的看代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;const int maxn = 1005;
int n,v,sum[maxn];
int dp[maxn][maxn][2],cost[maxn],dis[maxn];void solve()
{memset(dp,0x1f,sizeof(dp));dp[v][v][0] = dp[v][v][1] = 0;for(int l = 2; l <= n; l++){for(int i = 1; i <= n; i++){int j = i + l - 1;if(j > n) break;dp[i][j][0] = min(dp[i][j][0],dp[i+1][j][0] + (sum[n]-sum[j]+sum[i])*(dis[i+1]-dis[i]));dp[i][j][0] = min(dp[i][j][0],dp[i+1][j][1] + (sum[n]-sum[j]+sum[i])*(dis[j]-dis[i]));dp[i][j][1] = min(dp[i][j][1],dp[i][j-1][0] + (sum[n]-sum[j-1]+sum[i-1])*(dis[j]-dis[i]));dp[i][j][1] = min(dp[i][j][1],dp[i][j-1][1] + (sum[n]-sum[j-1]+sum[i-1])*(dis[j]-dis[j-1]));}}printf("%d\n",min(dp[1][n][0],dp[1][n][1]));
}int main()
{while(scanf("%d",&n)!=EOF){scanf("%d",&v);for(int i = 1; i <= n; i++)scanf("%d%d",&dis[i],&cost[i]);sum[0] = 0;for(int i = 1; i <= n; i++)sum[i] = sum[i-1] + cost[i];solve();}return 0;
}
nyoj 304(区间dp)相关推荐
- nyoj 304 节能 【区间dp】
点击打开链接 节能 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关 ...
- (NYoj 304) 节能 --区间DP
节能 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关掉ZK大道右侧上所 ...
- NYOJ 304 节能(DP)
题目描述 Dr.Kong设计的机器人卡多越来越聪明.最近市政公司交给卡多一项任务,每天早晨5:00开始,它负责关掉ZK大道右侧上所有的路灯. 卡多每到早晨5:00准会在ZK大道上某盏路灯的旁边,然后他 ...
- NYOJ 1067 Compress String(区间dp)
Compress String 时间限制:2000 ms | 内存限制:65535 KB 难度:3 描述 One day,a beautiful girl ask LYH to help her ...
- 合并石子 区间dp水题
合并石子 链接: nyoj 737 描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N- ...
- POJ 2955 Brackets (区间DP)
题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- 0x53. 动态规划 - 区间DP(习题详解 × 8)
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 文章目录 0x53. 动态规划 - 区间DP Problem A. 最优矩阵链乘 Problem B. ...
- UVA1626 括号序列 Brackets sequence(区间DP匹配括号,输出匹配方案)
整理的算法模板合集: ACM模板 UVA1626 Brackets sequence 我们将正规括号序列定义如下: 空序列是正规括号序列. 如果 SSS 是一个正规括号序列,那么 (S) 和 [S] ...
- UVA10003 切木棍 Cutting Sticks(区间DP、细节)
整理的算法模板合集: ACM模板 本题其实就是一个区间DP 的模板题,总长度为len,有n个切割点,也就是说能被切割成n+1段,所以左边界是0,有边界是n + 1,所以答案就是f[0][n + 1]. ...
最新文章
- python中停车收费问题_使用CKRule实现停车场收费计算
- 裴健当选加拿大皇家学会院士:曾任华为首席科学家、京东副总裁,学术引用超8万次...
- 七十九、TodoList示例 深入Redux的工作流
- NBU调用crontab备份
- jupyter的常用操作——Python学习(二)
- 用 iOS-System-Services 框架获取iOS设备所用的设备信息
- 国密 GmSSL 版本及安装
- html5模板md风格,使用CSS3 制作一个material-design 风格登录界面实例
- 中国男性最想娶回家的金庸女性角色排行榜zz
- 建议收藏,22个Python迷你项目(附源码)
- android格式化sd卡软件,SD/TF卡格式化程序
- 悼念512汶川大地震遇难同胞
- 如何通过C/C++求任意角度的余弦值
- linux运行igv报错,远程linux IGV桌面显示(putty+xming+xmanager)-Go语言中文社区
- 处理BigDecimal字段, java.math.BigDecimal cannot be cast to [Ljava.lang.Object;
- 运行tomcat7w.exe,提示:指定的服务未安装unable to open the service tomcat7
- 计算机组成原理cs和we,《计算机组成原理》课程习题答案_秦磊华2011-9-8
- Zigbee——串口无线透传分析
- 个人关于高考志愿填报的一丁点儿看法
- Android Studio常用API