各种蕴含算法思想的DP - 2
study from:
https://www.cnblogs.com/flashhu/p/9480669.html
3.斜率dp
study from:http://www.cnblogs.com/MashiroSky/p/6009685.html

或单减

https://www.luogu.org/problemnew/show/P3195
study from:http://www.cnblogs.com/MashiroSky/p/5968118.html

1 #include <cstdio>
2 #include <cstdlib>
3 #include <cmath>
4 #include <cstring>
5 #include <time.h>
6 #include <string>
7 #include <set>
8 #include <map>
9 #include <list>
10 #include <stack>
11 #include <queue>
12 #include <vector>
13 #include <bitset>
14 #include <ext/rope>
15 #include <algorithm>
16 #include <iostream>
17 using namespace std;
18 #define ll long long
19 #define minv 1e-6
20 #define inf 1e9
21 #define pi 3.1415926536
22 #define E 2.7182818284
23 const ll mod=1e9+7;//998244353
24 const int maxn=5e4+10;
25
26 ll sum[maxn],a[maxn],f[maxn],L;
27 int q[maxn];
28
29 double slope(int j,int k)
30 {
31 return (f[k]-f[j]+(a[k]+L+1)*(a[k]+L+1)-(a[j]+L+1)*(a[j]+L+1))
32 /2.0/(a[k]-a[j]);
33 }
34
35 int main()
36 {
37 int n,l,r,i;
38 ll s;
39 scanf("%d%lld",&n,&L);
40 sum[0]=0;
41 l=1,r=1;
42 f[0]=0;
43 q[1]=0;
44 for (i=1;i<=n;i++)
45 {
46 scanf("%lld",&s);
47 sum[i]=sum[i-1]+s;
48 a[i]=sum[i]+i;
49 while (r>l && slope(q[l],q[l+1])<=a[i]) //have =
50 l++;
51 f[i]=f[q[l]]+pow(i-q[l]-1+sum[i]-sum[q[l]]-L,2);
52 while (r>l && slope(q[r-1],q[r])>slope(q[r],i))//have no =
53 r--;
54 q[++r]=i;
55 }
56 printf("%lld",f[n]);
57 return 0;
58 }
https://www.luogu.org/problemnew/show/P2900

1 #include <cstdio>
2 #include <cstdlib>
3 #include <cmath>
4 #include <cstring>
5 #include <time.h>
6 #include <string>
7 #include <set>
8 #include <map>
9 #include <list>
10 #include <stack>
11 #include <queue>
12 #include <vector>
13 #include <bitset>
14 #include <ext/rope>
15 #include <algorithm>
16 #include <iostream>
17 using namespace std;
18 #define ll long long
19 #define minv 1e-6
20 #define inf 1e9
21 #define pi 3.1415926536
22 #define nl 2.7182818284
23 const ll mod=1e9+7;//998244353
24 const int maxn=5e4+10;
25
26 struct node
27 {
28 ll x,y;
29 }s[maxn],d[maxn];
30
31 ll f[maxn];
32 int q[maxn];
33
34 int cmp(node a,node b)
35 {
36 if (a.y==b.y)
37 return a.x>b.x;
38 else
39 return a.y>b.y;
40 }
41
42 double slope(int j,int k)
43 {
44 return 1.0*(f[k]-f[j])/(d[j+1].y-d[k+1].y);
45 }
46
47 int main()
48 {
49 int n,i,m,k,l,r;
50 scanf("%d",&n);
51 for (i=1;i<=n;i++)
52 scanf("%lld%lld",&s[i].x,&s[i].y);
53 sort(s+1,s+n+1,cmp);
54 m=0;
55 k=0;
56 for (i=1;i<=n;i++)
57 if (s[i].x>k)
58 {
59 d[++m]=s[i];
60 k=s[i].x;
61 }
62
63 f[0]=0;
64 q[1]=0;
65 l=1,r=1;
66 for (i=1;i<=m;i++)
67 {
68 while (l<r && slope(q[l],q[l+1])<=d[i].x)
69 l++;
70 f[i]=f[q[l]]+d[q[l]+1].y*d[i].x;
71 while (l<r && slope(q[r-1],q[r])>slope(q[r],i))
72 r--;
73 q[++r]=i;
74 }
75 printf("%lld",f[m]);
76 return 0;77 }
各种蕴含算法思想的DP - 2的更多相关文章
- 各种蕴含算法思想的DP - 3
内容中包含 base64string 图片造成字符过多,拒绝显示
- 各种蕴含算法思想的DP - 1
study from: https://www.cnblogs.com/flashhu/p/9480669.html 1.前缀和 https://www.luogu.org/problemnew/sh ...
- AC自动机——多模式串匹配的算法思想
标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...
- 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...
- [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...
- JVM三种垃圾收集算法思想及发展过程
JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...
- 基本算法思想Java实现的详细代码
基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...
- 基本算法思想之递推算法思想(C++语言描述)
递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...
- [算法模版]子序列DP
[算法模版]子序列DP 如何求本质不同子序列个数? 朴素DP 复杂度为\(O(nq)\).其中\(q\)为字符集大小. \(dp[i]\)代表以第\(i\)个数结尾的本质不同子序列个数.注意,这里对于 ...
随机推荐
- flask_admin 笔记五 内置模板设置
内建模板 Flask-Admin是使用jinja2模板引擎 1)扩展内建的模板 不要完全覆盖内置的模板,最好是扩展它们. 这将使您更容易升级到新的Flask-Admin版本. 在内部,Flask-Ad ...
- 《Effective Java》 学习笔记 —— 并发
<Effective Java>第二版学习笔记之并发编程. 第66条 同步访问共享的可变数据 * 关键字synchronized可以保证在同一时刻只有一个线程可以执行某个方法或代码块. * ...
- 微信小程序初体验与DEMO分享
前言 前一段时间微信公布小程序,瞬间引来了大量的关注.博主的公司也将其定为目标之一,遂派本菜为先头兵(踩坑侠). 这次开发了一个比较完整的DEMO,模仿自某个APP首页,由于保护隐私的目的我把数据拷贝 ...
- EOS开发基础之四:使用cleos命令行客户端操作EOS——智能合约之eosio.bios和eosio.token
现实世界中的合约,简单地说,是一个参与活动的所有人都需要遵循的协议.合约可以是正式的法律合同(例如,金融交易),或者是简单的游戏规则.典型的活动可以是诸如资金转移(在金融合约的情况下)或游戏动作(在游 ...
- 甲题题解-1116. Come on! Let’s C (20)-(素数筛选法)
用vis标记出现过的id,checked标记询问过的id.至于如何判断排名为素数,用素数筛选法预处理一下即可,水题. #include <iostream> #include <cs ...
- 团队作业Week5
每个团队开一个讨论会,协商讨论团队贡献分的分配方式.每个团队的团队贡献分为50分/人.每个人分数不能相同,请详细说明分数的分配规则. 可参考这个博客. 截止时间:2014-10-27
- Linux读书笔记第五章
主要内容: 什么是系统调用 Linux上的系统调用实现原理 一个简单的系统调用的实现 1. 什么是系统调用 简单来说,系统调用就是用户程序和硬件设备之间的桥梁. 用户程序在需要的时候,通过系统调用来使 ...
- NBPL团队总结
我们团队钱多多记账软件项目从2017年12月号开始,历时两个周.这两个周,我们从头学起,学到了很多新的知识,对一些概念有了认知,关于团队协作,关于团队建设,关于Android开发.回顾前两周,我们一致 ...
- C++:派生类的构造函数和析构函数的调用顺序
一.派生类 在C++编程中,我们在编写一个基类的派生类时,大致可以分为四步: • 吸收基类的成员:不论是数据成员还是函数成员,派生类吸收除基类的构造函数和析构函数之外的全部成员. • 改造基类函数:在 ...
- Leetcode题库——38.报数
@author: ZZQ @software: PyCharm @file: countAndSay.py @time: 2018/11/9 14:07 说明:报数序列是一个整数序列,按照其中的整数的 ...