180904 再卖菜 ccf
思路
dfs+去重
关键
满分的关键在于不同的前缀可能会遇到相同的情况,要直接排除这些情况,避免重复计算(单纯dfs只有80分)
实现
这里采用数组f来记录各种情况,通过traceback函数回溯
1 #include<iostream>2 #include<cstring>3 4 using namespace std;5 6 int a[305];7 int b[305];8 bool f[305][305][305];//去重 9 //int s=0; 10 int n; 11 void traceback(int i,int b1,int b2){ 12 /*if(s==1){ 13 return; 14 }*/ 15 if(f[i][b1][b2])return; 16 f[i][b1][b2]=true; 17 if(i>=n){ 18 if((b1+b2)/2==a[n-1]){ 19 for(int j=0;j<n;j++){ 20 cout<<b[j]<<' '; 21 } 22 exit(0); 23 } 24 25 } 26 else{ 27 for(int j=0;j<3;j++){//考虑除法取整的情况 28 b[i]=a[i-1]*3+j-b2-b1; 29 if(b[i]<=0){ 30 continue; 31 } 32 traceback(i+1,b[i],b[i-1]); 33 /*if(s==1){ 34 return; 35 }*/ 36 } 37 } 38 return; 39 } 40 41 int main(){ 42 memset(f,false,sizeof(f)); 43 cin>>n; 44 for(int i=0;i<n;i++){ 45 cin>>a[i]; 46 } 47 48 int lim=2*a[0]; 49 for(int i=1;i<=lim;i++){ 50 b[0]=i; 51 for(int j=0;j<2;j++){//考虑除法取整的情况 52 b[1]=lim+j-b[0]; 53 if(b[1]<=0){ 54 continue; 55 } 56 traceback(2,b[1],b[0]); 57 /*if(s==1){ 58 return 0; 59 }*/ 60 } 61 } 62 63 return 0; 64 }
题目
第一天,每个商店都自己定了一个正整数的价格。店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商店的价格调整自己的价格。具体的,每家商店都会将第二天的菜价设置为自己和相邻商店第一天菜价的平均值(用去尾法取整)。
注意,编号为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个正整数,依次表示每个商店第二天的菜价。
2 2 1 3 4 9 10 13
对于60%的评测用例,2<=n<=20,第二天每个商店的菜价为不超过100的正整数;
对于所有评测用例,2<=n<=300,第二天每个商店的菜价为不超过100的正整数。
请注意,以上都是给的第二天菜价的范围,第一天菜价可能会超过此范围。
转载于:https://www.cnblogs.com/Gru-blog/p/11260539.html
180904 再卖菜 ccf相关推荐
- CCF201809-4 再卖菜
问题描述: 试题编号: 201809-4 试题名称: 再卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一 ...
- CCF201809-4 再卖菜(100分)【DFS】
试题编号: 201809-4 试题名称: 再卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第 ...
- [差分约束] AcWing-393 雇佣收银员 AcWing-2128 狡猾的商人 AcWing-3265 再卖菜
差分约束的大概样子 (大概) 差分约束一般是由特殊的n元一次不等式组组成的,它包含N个变量X1-Xn和M个约束条件,而且每个约束条件都是由两个变量做差组成的,形如,其中的ck是常数,它需要我们找到一组 ...
- CCF 差分约束--201809再卖菜
问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个正整数的价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己 ...
- CCF201809-4 再卖菜
问题描述: AC代码: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include ...
- [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, ...
- 【CCF】 201809-1 卖菜
试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商 ...
- CCF CSP 201809-1 卖菜
题目链接:http://118.190.20.162/view.page?gpid=T79 问题描述 试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB ...
最新文章
- pythonfor循环break_python 中 for 循环 if循环 break
- 1NF 2NF 3NF BCNF
- 95-846-820-源码-网络-Flink 网络传输优化技术
- 【报告分享】人工智能在五大行业的成就与挑战-毕马威.pdf(附下载链接)
- 今天发生在自己身上的搞笑事情是什么呢?
- 《每个设计师都应该掌握的50个css代码段》11~20段
- java线性数据结构_Java实现数据结构之线性结构
- 【计算机系统基础】- 袁春风
- endpt matlab,将SDPT3配置到matlab
- 什么互动管理必将风行于天下?(转)
- 官宣! 国际著名投资家吉姆·罗杰斯确认出席钛媒体2021 T-EDGE
- DSP28335 CAN模块使用
- java 遍历数据的三种方式
- mysql upgrade 报错_mysql_upgrade
- hdu 3642 体积并
- 第1章 Linux系统介绍与环境搭建准备
- python 字典
- java 杰表_【汉王OCR和杰表sdk(web报表二次开发包,java语言) 2.8哪个好用】汉王OCR和杰表sdk(web报表二次开发包,java语言) 2.8对比-ZOL下载...
- 老外的现代版空手套白狼
- 优动漫PAINT基础系列之拾色器教学
热门文章
- POJ 3417 Network
- Intellij Idea 从 Svn 检出 Maven 项目、部署 Tomcat 运行
- 后台获取html控件的值
- 微信平台开发者:桥梁上的运动员
- MAVEN POM dependencies and Dependency Exclusions
- [数据结构]快速排序
- Java知多少(25)再谈Java包
- windows右键没有显示“文本文档”的解决办法(建议用方法二)
- 注意Hibernate4在开发当中的一些改变
- [转]web.xml 中的listener、 filter、servlet 加载顺序及其详解