费用流

并没有想出来构图方法 我们设立源汇,其实我们关心的是相邻两个值的差值,如果差值小于0说明需要长高,那么向汇点连边差值,说明需要修改,如果差大于零,那么由源点连边差值,说明可以提供修改空间,再由源点向1和n+1连边inf,因为这两个点是可以无限修改的。然后1-2-3-n+1连双向边,费用为1,容量inf,表明修改差值。正向流是提高后面的值,反向流是降低前面的值。而且得加堆优化迪杰斯特拉,否则跑不过去了。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, int> PII;
const int N = ;
const ll inf = ;
struct edge {
int nxt, to;
ll f, c;
} e[N * ];
int inq[N], a[N], b[N], head[N], pree[N], pprev[N];
ll dis[N];
priority_queue<PII, vector<PII>, greater<PII> > q;
int n, source, sink, cnt = ;
inline void link(int u, int v, ll f, ll c)
{
e[++cnt].nxt = head[u];
head[u] = cnt;
e[cnt].to = v;
e[cnt].f = f;
e[cnt].c = c;
}
inline void insert(int u, int v, ll f, ll c)
{
link(u, v, f, c);
link(v, u, , -c);
}
inline bool spfa()
{
int l = , r = ;
for(int i = source; i <= sink; ++i)
dis[i] = inf;
dis[source] = ;
q.push(make_pair(, source));
while(!q.empty())
{
PII x = q.top();
q.pop();
int u = x.second;
if(dis[u] != x.first) continue;
for(int i = head[u]; i; i = e[i].nxt) if(e[i].f && dis[e[i].to] > dis[u] + e[i].c)
{
pree[e[i].to] = i;
pprev[e[i].to] = u;
dis[e[i].to] = dis[u] + e[i].c;
q.push(make_pair(dis[e[i].to], e[i].to));
}
}
return dis[sink] != inf;
}
inline ll getflow()
{
int now = sink;
ll delta = inf;
while(now != source)
{
delta = min(delta, e[pree[now]].f);
now = pprev[now];
}
now = sink;
while(now != source)
{
e[pree[now]].f -= delta;
e[pree[now] ^ ].f += delta;
now = pprev[now];
}
return delta * dis[sink];
}
inline ll mcmf()
{
ll ret = ;
while(spfa()) ret += getflow();
return ret;
}
int main()
{
scanf("%d", &n);
source = ;
sink = n + ;
for(int i = ; i <= n; ++i)
scanf("%d", &a[i]);
for(int i = ; i <= n; ++i)
{
b[i] = a[i] - a[i - ];
if(b[i] > ) insert(i, sink, b[i] - , );
else insert(source, i, -b[i] + , );
}
for(int i = ; i <= n; ++i)
{
insert(i, i + , inf, );
insert(i + , i, inf, );
}
insert(, sink, inf, );
insert(n + , sink, inf, );
printf("%lld\n", mcmf());
return ;
}

713C的更多相关文章

  1. codeforces 713C C. Sonya and Problem Wihtout a Legend(dp)

    题目链接: C. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 ...

  2. Codeforces 713C Sonya and Problem Wihtout a Legend

    题意:给一个序列,可以进行若干次操作,每次操作选择一个数让它+1或-1,问最少要几次操作使得序列变为严格单调递增序列. 题解:首先考虑非严格递增序列,则每个数字最终变成的数字一定是该数组中的某个数.那 ...

  3. Codeforces 713C Sonya and Problem Wihtout a Legend(单调DP)

    [题目链接] http://codeforces.com/problemset/problem/713/C [题目大意] 给出一个数列,请你经过调整使得其成为严格单调递增的数列,调整就是给某些位置加上 ...

  4. Codeforces 713C Sonya and Problem Wihtout a Legend DP

    C. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 megaby ...

  5. codeforces 713C C. Sonya and Problem Wihtout a Legend(dp)(将一个数组变成严格单增数组的最少步骤)

    E. Sonya and Problem Wihtout a Legend time limit per test 5 seconds memory limit per test 256 megaby ...

  6. Codeforces 713C Sonya and Problem Wihtout a Legend(DP)

    题目链接   Sonya and Problem Wihtout a Legend 题意  给定一个长度为n的序列,你可以对每个元素进行$+1$或$-1$的操作,每次操作代价为$1$. 求把原序列变成 ...

  7. [20180918]文件格式与sql_id.txt

    [20180918]文件格式与sql_id.txt --//记录测试中遇到的一个问题.这是我在探究SQL*Net more data from client遇到的问题.--//就是实际oracle会把 ...

  8. Week One

    2018.11.21: 1.[BZOJ 4868][SHOI 2017] 从后往前枚举最后位置即可,如果$A<B$,用尽可能多的$A$替换$B$操作 Tip:很大的$C$可能爆$longlong ...

  9. codeforces的dp专题

    1.(467C)http://codeforces.com/problemset/problem/467/C 题意:有一个长为n的序列,选取k个长度为m的子序列(子序列中不能有位置重复),求所取的k个 ...

随机推荐

  1. 正则表达式提取String子串

    最近遇到了一个字符串处理的功能,忽然发现了正则表达式的强大,深深的被她的迷人魅力所吸引,以前只是听说,今天亲眼所见,亲身经历,真的彻底折服. 言归正传:java中String类里面封装了很多字符串处理 ...

  2. 循环语句和方法(day4)

  3. IDEA生成增强for循环

    itar 生成array for代码块 for (int i = 0; i < array.length; i++) { = array[i]; } itco 生成Collection迭代 fo ...

  4. P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools

    P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学 ...

  5. 初学者对ASCII编码、Unicode编码、UTF-8编码的理解

    最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是 255(二进制 11111111=十进制 255),如果要表示更大的整数,就必须用更多的字节. ...

  6. render: h => h(App) $mount 什么意思

    初始一个vue.js项目时,常常发现main.js里有如下代码: new Vue({ render: h => h(App) }).$mount('#app') 这什么意思?那我自己做项目怎么改 ...

  7. i++与++i的区别及效率

    i++与++i的区别及效率   先看看基本区别:i++ :先在i所在的表达式中使用i的当前值,后让i加1++i :让i先加1,然后在i所在的表达式中使用i的新值 看一些视频教程里面写for循环的时候都 ...

  8. “从客户端(content="XXXX")中检测到有潜在危险的 Request.Form值” 解决方案

    解决方案一: 在.aspx文件头中加: <%@Page validateRequest="false" %> 解决方案二: 修改web.config文件: <co ...

  9. ARC 73 E - Ball Coloring

    E - Ball Coloring Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Ther ...

  10. Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现

    Spring Boot 内嵌容器 Tomcat / Undertow / Jetty 优雅停机实现 Anoyi 精讲JAVA 精讲JAVA 微信号 toooooooozi 功能介绍 讲解java深层次 ...