CF 1013E Hills
这是一道DP题...我居然有那么半个小时思考非DP解决方案,实在是太弱了。
题意:给您若干山,您可以花费1代价削去1高度,求有k个山峰时的最小代价。
输出k = 1 ~ (n + 1) >> 1的答案。
这最后一个直接限制了我的DP思路。。。后来发现,DP本来就存了这些答案的..毒瘤。
状态表示是f[i][j][0/1],表示前i座山有j个山峰,自己是不是山峰。
比较奇特的是f[i][j][1]要从f[i - 2][j - 1][0/1]转移过来,自然少不了一些奇奇怪怪的特判...
#include <cstdio>
#include <algorithm>
#include <cstring>
typedef long long LL;
const int N = ; LL f[N][N][]; // 0 no_hill 1 hill
int a[N], n; inline int val(int i) {
if(i < ) {
return ;
}
if(i == ) {
if(a[i] < a[i + ]) {
return ;
}
return a[i] - a[i + ] + ;
}
if(a[i - ] > a[i]) {
if(a[i + ] > a[i]) {
return ;
}
return a[i] - a[i + ] + ;
}
if(a[i + ] > a[i - ] - ) {
return ;
}
return a[i - ] - a[i + ]; /// error : a[i - 1] - a[i]
}
inline int vl(int i) {
if(i < ) {
return ;
}
if(a[i] < a[i + ]) {
return ;
}
return a[i] - a[i + ] + ;
}
inline int vx(int i) {
if(i > n) {
return ;
}
if(a[i] < a[i - ]) {
return ;
}
return a[i] - a[i - ] + ;
} int main() {
memset(f, 0x3f, sizeof(f));
scanf("%d", &n);
for(int i = ; i <= n; i++) {
f[i][][] = ;
}
for(int i = ; i <= n; i++) {
scanf("%d", &a[i]);
}
int k = (n + ) >> ; for(int j = ; j <= k; j++) {
for(int i = ; i <= n; i++) {
if(i == ) {
if(j == ) {
f[i][j][] = vx();
//printf("f[1][1][1] = %d\n", f[i][j][1]);
}
continue;
}
f[i][j][] = std::min(f[i - ][j][], f[i - ][j][]);
f[i][j][] = std::min(f[i - ][j - ][] + val(i - ), f[i - ][j - ][] + vl(i - )) + vx(i + );
//printf("f[%d][%d][0] = %d\n", i, j, f[i][j][0]);
//printf("f[%d][%d][1] = %d\n", i, j, f[i][j][1]);
}
}
/*
10
2 2 4 4 3 1 1 2 3 2
*/
for(int i = ; i <= k; i++) {
printf("%I64d ", std::min(f[n][i][], f[n][i][]));
} return ;
}
AC代码
CF 1013E Hills的更多相关文章
- CF 1013E Hills——隔项转移的DP
题目:http://codeforces.com/contest/1013/problem/E 设 dp[ i ][ j ][ 0/1 ] 表示前 i 个位置,有 j 个山峰,第 i 个位置不是/是山 ...
- DP擎天
DP! 黄题: 洛谷P2101 命运石之门的选择 假装是DP(分治 + ST表) CF 982C Cut 'em all! 树形贪心 洛谷P1020 导弹拦截 单调队列水题 绿题: 洛谷P1594 护 ...
- ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'
凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- cf Round 613
A.Peter and Snow Blower(计算几何) 给定一个点和一个多边形,求出这个多边形绕这个点旋转一圈后形成的面积.保证这个点不在多边形内. 画个图能明白 这个图形是一个圆环,那么就是这个 ...
- ARC下OC对象和CF对象之间的桥接(bridge)
在开发iOS应用程序时我们有时会用到Core Foundation对象简称CF,例如Core Graphics.Core Text,并且我们可能需要将CF对象和OC对象进行互相转化,我们知道,ARC环 ...
- [Recommendation System] 推荐系统之协同过滤(CF)算法详解和实现
1 集体智慧和协同过滤 1.1 什么是集体智慧(社会计算)? 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web ...
- CF memsql Start[c]UP 2.0 A
CF memsql Start[c]UP 2.0 A A. Golden System time limit per test 1 second memory limit per test 256 m ...
- CF memsql Start[c]UP 2.0 B
CF memsql Start[c]UP 2.0 B B. Distributed Join time limit per test 1 second memory limit per test 25 ...
随机推荐
- MySQL5.5 安装配置方法教程
MySQL下载地址:http://dev.mysql.com/downloads/installer/ 1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型 ...
- Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-
Maven项目报错:Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clea ...
- Flutter路由管理
第一点:push使用 1.pushNamed——Navigator.of(context).pushNamed('routeName'); 此种方法只是简单的将我们需要进入的页面push到栈顶,以此来 ...
- linux audit审计(7)--读懂audit日志
让我们先来构造一条audit日志.在home目录下新建一个目录,然后配置一条audit规则,对这个目录的wrax,都记录审计日志: auditctl -w /home/audit_test -p wr ...
- python RSA 加密与签名
PyCrypto装起来就简单多了,我是直接 sudo easy_install pycrypto 直接搞定的 先生成rsa的公私钥:打开控制台,输入 openssl 再输入 genrsa -out p ...
- 今天开始学习模式识别与机器学习Pattern Recognition and Machine Learning (PRML),章节5.1,Neural Networks神经网络-前向网络。
话说上一次写这个笔记是13年的事情了···那时候忙着实习,找工作,毕业什么的就没写下去了,现在工作了有半年时间也算稳定了,我会继续把这个笔记写完.其实很多章节都看了,不过还没写出来,先从第5章开始吧, ...
- 使用cmd命令行窗口操作SqlServer
本文主要介绍使用windows下的使用cmd命令行窗口操作Sqlserver, 首先我们可以运行 osql ?/ ,这样就把所有可以通过CMD命令行操作sqlserver的命令显示出来 (有图有 ...
- 洛谷 P2151 [SDOI2009]HH去散步
题目链接 思路 如果没有不能走上一条边的限制,很显然就是dp. 设f[i][j]表示到达i点走了j步的方案数,移到k点可以表示为f[k][j+1]+=f[i][j]. 如果有限制的话,可以考虑用边表示 ...
- linux常用命令(个人总结)
1.快捷键: ctrl + l --------------------清屏 ctrl + c --------------------退出当前命令 ctrl + ...
- Java中的CopyOnWrite
CopyOnWrite简称COW,是一种程序设计的一种优化的策略方法,他开始的思想就是大家一起共享一件东西或商品,当一个人想要改这个事物原有的状态时,会重新复制一份出去,然后再新的事物上面改他所需要的 ...