博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HackerRank "Sherlock and Cost"
阅读量:5294 次
发布时间:2019-06-14

本文共 1074 字,大约阅读时间需要 3 分钟。

Classic.. just classic.  It is a mix of Greedy and DP. The naive DP is, iterate over all [1..Bi] which is O(n^3). However, deeper thought into the problem indicates: we only need to consider [1, Bi]. So then it becomes O(n)!

Lesson learnt: DP choices can be optimized!

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define MAX_V 101typedef long long LL;LL calc(vector
&in){ size_t len = in.size(); vector
> dp(len, vector
(2, 0)); for (int i = 1; i < len; i++) { dp[i][0] = std::max(dp[i][0], in[i - 1] - 1 + dp[i-1][1]); dp[i][1] = std::max(dp[i][1], in[i] - 1 + dp[i - 1][0]); dp[i][1] = std::max(dp[i][1], abs(in[i - 1] - in[i]) + dp[i - 1][1]); } return std::max(dp[len - 1][0], dp[len - 1][1]);}int main() { int t; cin >> t; while (t--) { int n; cin >> n; vector
in(n); for (int i = 0; i < n; i++) cin >> in[i]; LL ret = calc(in); cout << ret << endl; } return 0;}

转载于:https://www.cnblogs.com/tonix/p/4664673.html

你可能感兴趣的文章
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>