CSP 2018-9-4 再卖菜 搜索 + 剪枝
201809-4 | |
试题名称: | 再卖菜 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜。 输入格式 输入的第一行包含一个整数n,表示商店的数量。 输出格式 输出一行,包含n个正整数,依次表示每个商店第一天的菜价。 样例输入 8 样例输出 2 2 2 1 6 5 16 10 数据规模和约定 对于30%的评测用例,2<=n<=5,第二天每个商店的菜价为不超过10的正整数; |
思路:
剪枝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 再卖菜 搜索 + 剪枝相关推荐
- CCF201809-4 再卖菜(100分)【DFS】
试题编号: 201809-4 试题名称: 再卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第 ...
- CCF201809-4 再卖菜
问题描述: 试题编号: 201809-4 试题名称: 再卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一 ...
- [差分约束] AcWing-393 雇佣收银员 AcWing-2128 狡猾的商人 AcWing-3265 再卖菜
差分约束的大概样子 (大概) 差分约束一般是由特殊的n元一次不等式组组成的,它包含N个变量X1-Xn和M个约束条件,而且每个约束条件都是由两个变量做差组成的,形如,其中的ck是常数,它需要我们找到一组 ...
- 180904 再卖菜 ccf
思路 dfs+去重 关键 满分的关键在于不同的前缀可能会遇到相同的情况,要直接排除这些情况,避免重复计算(单纯dfs只有80分) 实现 这里采用数组f来记录各种情况,通过traceback函数回溯 1 ...
- CCF 差分约束--201809再卖菜
问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个正整数的价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己 ...
- [csp-201809-4]再卖菜 差分约束or记忆化搜索
先更新第一个做法:差分约束 转化成最长路,求出的每一个解是满足差分方程的最小值 spfa求最短路 对于边(x->y) 有: 1 if(dis[y] > dis[x] + a[i].d) d ...
- CSP认证201809-4 再卖菜[C++题解]:差分约束、前缀和
文章目录 题目解答 题目链接 题目解答 来源:acwing 分析: 对于a0,a1,...,ana_0, a_1,...,a_na0,a1,...,an,经过计算相邻的数的平均值得到b0,b1, ...
- CCF201809-4 再卖菜
问题描述: AC代码: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include ...
- CCF CSP 201809-1 卖菜
题目链接:http://118.190.20.162/view.page?gpid=T79 问题描述 试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB ...
- ## CSP认证 201809-1 卖菜(C语言)(100分)
试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店 ...
最新文章
- 在CentOS 6.8 x86_64上安装nginx 1.10.3
- 《数学之美》第25章 条件随机场、文法分析及其他
- uva 11468 - Substring(AC自己主动机+概率)
- SQL server的with的用法(一)
- SynchronousQueue队列
- 单例模式以及在C#中的使用
- ASP.NET Core使用Middleware有条件地允许访问路由
- python:对list去重
- SEO按天扣费系统商业网站源码
- java并发-多线程方面的思考
- 【学习OpenCV4】图像的模糊处理方法(均值滤波与高斯模糊)
- dockerfile安装jenkins 并配置构建工具(node、npm、maven、git)
- 必读的 Java 学习资料分享! 1
- 微信HOOK发送Emoji表情
- python京东抢购 github_GitHub - DevGuan/jd-autobuy: Python爬虫,京东自动登录,在线抢购商品...
- javascript学习之 小案例 (29)——js时钟
- 蓝牙核心协议学习 -- 基带协议(Baseband)翻译最终版
- Hexo博客icarus主题定制篇
- 前端开发:a标签的使用
- 基于Java的蛋糕甜点店销售(商城)系统