201809-4
试题名称: 再卖菜
时间限制: 1.0s
内存限制: 256.0MB
问题描述:

问题描述

  在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。
  第一天,每个商店都自己定了一个正整数的价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。
  注意,编号为1的商店只有一个相邻的商店2,编号为n的商店只有一个相邻的商店n-1,其他编号为i的商店有两个相邻的商店i-1和i+1。
  给定第二天各个商店的菜价,可能存在不同的符合要求的第一天的菜价,请找到符合要求的第一天菜价中字典序最小的一种。
  字典序大小的定义:对于两个不同的价格序列(a1, a2, ..., an)和(b1, b2, b3, ..., bn),若存在i (i>=1), 使得ai<bi,且对于所有j<i,aj=bj,则认为第一个序列的字典序小于第二个序列。

输入格式

  输入的第一行包含一个整数n,表示商店的数量。
  第二行包含n个正整数,依次表示每个商店第二天的菜价。

输出格式

  输出一行,包含n个正整数,依次表示每个商店第一天的菜价。

样例输入

8
2 2 1 3 4 9 10 13

样例输出

2 2 2 1 6 5 16 10

数据规模和约定

  对于30%的评测用例,2<=n<=5,第二天每个商店的菜价为不超过10的正整数;
  对于60%的评测用例,2<=n<=20,第二天每个商店的菜价为不超过100的正整数;
  对于所有评测用例,2<=n<=300,第二天每个商店的菜价为不超过100的正整数。
  请注意,以上都是给的第二天菜价的范围,第一天菜价可能会超过此范围。

思路:

剪枝1:

vis[][][]数组记录在到达第s个位置时(此时b[s],b[s-1]均已知),根据关系推知b[s+1] = 3*a[s]-b[s]-b[s-1]+i(因为题目给的是整数除法,其中  0..2),这样,当到达当前状态时(状态 : (s,b[s-1],b[s])),如果发现已经访问过了,说明这种状态不可能满足条件,否则程序已经找到满意的结果,可以直接输出了,这样可以直接剪枝掉之后的所有步骤,效率大大增加。

剪枝2:

用flag标记 是否已经找到解,如果找到,之后的所有未完成的搜索,直接返回。

注意:第一个位置,与最后的位置单独处理一下。

code:

#include<cstdio>
#include<iostream>
#include<vector>
#include<string>
#include<map>
#include<cstring>
#include<set>
#include<cmath>
#include<queue>
#include<algorithm>
#define rep(i,j,k) for(int i=j;i<k;++i)
#define mst(a,b) memset((a),(b),sizeof(a))
#include<cstring>
using namespace std;
typedef long long LL;
typedef vector<int,int> pii;
const int MAXN = 305;
int n;
int a[MAXN];
int b[MAXN];
bool vis[MAXN][MAXN][MAXN];
bool flag;
void dfs(int s, int p1, int p2){if(vis[s][p1][p2] || flag) return;vis[s][p1][p2] = true;if(s == n-1){rep(i,0,3){//单独处理最后一个if((b[n] = (3*a[s]-p1-p2+i)) > 0 && (b[n-1] + b[n])/2 == a[n]){flag = true;rep(i,1,n+1){printf("%d ",b[i]);}break;}}return;}rep(i,0,3){b[s+1] = 3*a[s]- p1 - p2 + i;//递推下一个位置的b[s+1]if(b[s+1] > 0){ // 可能有解dfs(s+1,b[s],b[s+1]);}}}int main(){scanf("%d",&n);rep(i,1,n+1) scanf("%d",&a[i]);rep(i,1,2*a[1]+1){//最大只能是 2*a[1]b[1] = i; b[2] = a[1]*2-b[1];dfs(2,b[1],b[2]);b[1] = i; b[2] = a[1]*2-b[1]+1;dfs(2,b[1],b[2]);}return 0;}

CSP 2018-9-4 再卖菜 搜索 + 剪枝相关推荐

  1. CCF201809-4 再卖菜(100分)【DFS】

    试题编号: 201809-4 试题名称: 再卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第 ...

  2. CCF201809-4 再卖菜

    问题描述: 试题编号: 201809-4 试题名称: 再卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一 ...

  3. [差分约束] AcWing-393 雇佣收银员 AcWing-2128 狡猾的商人 AcWing-3265 再卖菜

    差分约束的大概样子 (大概) 差分约束一般是由特殊的n元一次不等式组组成的,它包含N个变量X1-Xn和M个约束条件,而且每个约束条件都是由两个变量做差组成的,形如,其中的ck是常数,它需要我们找到一组 ...

  4. 180904 再卖菜 ccf

    思路 dfs+去重 关键 满分的关键在于不同的前缀可能会遇到相同的情况,要直接排除这些情况,避免重复计算(单纯dfs只有80分) 实现 这里采用数组f来记录各种情况,通过traceback函数回溯 1 ...

  5. CCF 差分约束--201809再卖菜

    问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个正整数的价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己 ...

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

    先更新第一个做法:差分约束 转化成最长路,求出的每一个解是满足差分方程的最小值 spfa求最短路 对于边(x->y) 有: 1 if(dis[y] > dis[x] + a[i].d) d ...

  7. CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和

    文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0​,a1​,...,an​,经过计算相邻的数的平均值得到b0,b1, ...

  8. CCF201809-4 再卖菜

    问题描述: AC代码: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include ...

  9. CCF CSP 201809-1 卖菜

    题目链接:http://118.190.20.162/view.page?gpid=T79 问题描述 试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB ...

  10. ## CSP认证 201809-1 卖菜(C语言)(100分)

    试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店 ...

最新文章

  1. 在CentOS 6.8 x86_64上安装nginx 1.10.3
  2. 《数学之美》第25章 条件随机场、文法分析及其他
  3. uva 11468 - Substring(AC自己主动机+概率)
  4. SQL server的with的用法(一)
  5. SynchronousQueue队列
  6. 单例模式以及在C#中的使用
  7. ASP.NET Core使用Middleware有条件地允许访问路由
  8. python:对list去重
  9. SEO按天扣费系统商业网站源码
  10. java并发-多线程方面的思考
  11. 【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)
  12. dockerfile安装jenkins 并配置构建工具(node、npm、maven、git)
  13. 必读的 Java 学习资料分享! 1
  14. 微信HOOK发送Emoji表情
  15. python京东抢购 github_GitHub - DevGuan/jd-autobuy: Python爬虫,京东自动登录,在线抢购商品...
  16. javascript学习之 小案例 (29)——js时钟
  17. 蓝牙核心协议学习 -- 基带协议(Baseband)翻译最终版
  18. Hexo博客icarus主题定制篇
  19. 前端开发:a标签的使用
  20. 基于Java的蛋糕甜点店销售(商城)系统

热门文章

  1. OSPF——LSA讲解
  2. 取次花丛懒回顾,半缘修道半缘君
  3. 生日快乐网站模板(HTML5+JS+CSS) 带音效
  4. 春季实习生校园招聘总结
  5. git 本地多账号管理
  6. CA数字证书是什么意思?SSL证书与CA数字证书有什么区别?
  7. VSCode 代码换行快捷键设置为Shift + Enter
  8. keycloak 添加 注册邮箱后缀验证
  9. 后端开发发展学习路线
  10. python画图旋转图形_python – 如何将matplotlib图旋转90度?