[csp-201809-4]再卖菜 差分约束or记忆化搜索

先更新第一个做法:差分约束

转化成最长路,求出的每一个解是满足差分方程的最小值
spfa求最短路
对于边(x->y) 有:
if(dis[y] > dis[x] + a[i].d) dis[y]=dis[x]+a[i].d;
dis[y]的初始值为INF,dis[y]会是满足所有约束条件之中所有可能的值之中最大的(更新到最大的就不会再更新了)。
贴一个简略的证明:

同理,最长路求出来的是所有可能解之中最大的。
这题是字典序最小,那么我们要转化成最长路来求,求到的每个s[i]都是可能的值中最小的一个。注意,菜价要是正整数(>=1)。
#include<bits/stdc++.h>
using namespace std; const int N=;
struct node{
int x,y,d,next;
}a[*N];
int n,al,first[N],b[N],s[N];
bool vis[N];
queue<int> q; void ins(int x,int y,int d)
{
al++;
a[al].x=x;a[al].y=y;a[al].d=d;
a[al].next=first[x];first[x]=al;
} void build_edge()
{
al=;
memset(first,,sizeof(first));
ins(,,*b[]);
ins(,,-(*b[]+));
for(int i=;i<=n-;i++)
{
ins(i-,i+,*b[i]);
ins(i+,i-,-(*b[i]+));
}
ins(n-,n,*b[n]);
ins(n,n-,-(*b[n]+));
for(int i=;i<=n;i++) ins(i-,i,);
} void spfa()
{
while(!q.empty()) q.pop();
memset(s,,sizeof(s));
memset(vis,,sizeof(vis));
s[]=;vis[]=;q.push();
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=first[x];i;i=a[i].next)
{
int y=a[i].y;
if(s[y]<s[x]+a[i].d)
{
s[y]=s[x]+a[i].d;
if(!vis[y])
{
vis[y]=;
q.push(y);
}
}
}
vis[x]=;
}
} int main()
{
//freopen("a.in","r",stdin);
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&b[i]);
build_edge();
spfa();
for(int i=;i<=n;i++)
printf("%d ",s[i]-s[i-]);printf("\n");
return ;
}
[csp-201809-4]再卖菜 差分约束or记忆化搜索的更多相关文章
- CCF(再卖菜60分)爆搜+记忆化搜索+差分约束
201809-4 再卖菜 我使用的是爆搜解决,只得了60分. 记忆化搜索 差分约束 #include<iostream> #include<cstdio> #include&l ...
- CCF-CSP题解 201809-4 再卖菜
碎碎念..近视加老花,还以为第二天除了第二家范围在100以内别的都不确定,于是x**算的记搜复杂度超时了.还鼓捣着什么差分区间最长路,虽然有大神用差分区间做出来了,然而自己并没有看懂. 其实就是一个记 ...
- 再谈记忆化搜索 HDU-1078
最近做DP题目,发现无论是LCS,还是有些题目涉及将动态规划的路径打印出来,而且有时候还要按格式输出,这个时候,记忆化搜索显得尤其重要,确实,记忆化搜索使用优化版本的动态规划,用起来思路清晰,非常方便 ...
- ccf 201809-4 再卖菜
这题一开始不知道剪枝这种操作,只会傻傻地dfs. 然后dfs递归写80分超时,非递归写70分超时(纳尼?我一直以为非递归算法在时间上会更优秀一些,为什么会这样?!!) 剪一下枝就都能过了 #inclu ...
- ccf再卖菜
https://blog.csdn.net/imotolove/article/details/82777819 记忆化搜索,还不太理解..
- ccf 再买菜 搜索 dfs
//递推关系式:(b[n-1]+b[n]+b[n+1])/3=a[n] //所以b[n+1]=3*a[n]-b[n-1]-b[n],或b[n+1]=3*a[n]-b[n-1]-b[n]+1,或b[n+ ...
- 【转】最短路&差分约束题集
转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...
- 转载 - 最短路&差分约束题集
出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★ ...
- CCF CSP 201809-1 卖菜
题目链接:http://118.190.20.162/view.page?gpid=T79 问题描述 试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB ...
随机推荐
- 详解Android微信登录与分享
Android 使用微信登录.分享功能 具体的文档详情微信官网上介绍(微信官网文档),本人直接按照项目部署步骤进行讲解: 第一步:申请你的AppID: 第二步:依赖 dependencies { co ...
- Scrum 项目 3.0
-------------------------------------3.0----------------------------------------------------- 一.项目工作 ...
- jsp 页面和 jsp标记
一个jsp页面可由5种元素组成 html标记 变量和方法的声明 java程序片 java表达式 <%!变量和方法的声明%> 被声明的方法和变量在整个jsp页面都可以访问,为全局变量 当多个 ...
- beta阶段博客合集
第一次博客 第二次博客 第三次博客 第四次博客 第五次博客
- loadrunner汉化【运行时设置】菜单选项截图
来自为知笔记(Wiz)
- 使用pt-query-digest,找到不是很合适的sql
pt-query-digest 1. 概述 索引可以我们更快速的执行查询,但是肯定存在不合理的索引,如果想找到那些索引不是很合适的查询,并在它们成为问题前进行优化,则可以使用pt-query-dig ...
- HDU 2255 奔小康赚大钱 (KM算法 模板题)
奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Subm ...
- PHP面试经常被提到的问题
1. Include 与 require的区别,require和require_once的效率哪个高? PHP在遇到include时就解释一次,如果页面中出现10次include,php就解释10次, ...
- P1503 鬼子进村
题目背景 小卡正在新家的客厅中看电视.电视里正在播放放了千八百次依旧重播的<亮剑>,剧中李云龙带领的独立团在一个县城遇到了一个鬼子小队,于是独立团与鬼子展开游击战. 题目描述 描述 县城里 ...
- 【spoj SUBLEX】 Lexicographical Substring Search
http://www.spoj.com/problems/SUBLEX/ (题目链接) 题意 给出一个字符串,询问其中字典序第K小的子串. Solution 后缀自动机例题. 构出后缀自动机以后,对每 ...