CCF-CSP题解 201809-4 再卖菜
碎碎念。。近视加老花,还以为第二天除了第二家范围在100以内别的都不确定,于是x**算的记搜复杂度超时了。还鼓捣着什么差分区间最长路,虽然有大神用差分区间做出来了,然而自己并没有看懂。
其实就是一个记忆化搜索。搜索时用vis[n][300][300]记录访问状态。第二、三维数组下标映射第一天n-1、n号店的价格。每个数的范围是1-300,所以复杂度是n*300*300并不会超时。
注意第一天是两个数的均值,验证第n天时也是两个数的均值。
#include <bits/stdc++.h>
const int maxn = 300;
using namespace std;
int n;
int average[maxn+10];
int origin[maxn+10];
int vis[maxn+10][305][305];
bool dfs(int x)
{
// printf("%d %d %d\n", x, origin[x-1], origin[x]);
vis[x][origin[x-1]][origin[x]] = 1;
if (x < n)
{
origin[x+1] = average[x] * 3 - origin[x] - origin[x-1];
if (origin[x+1] >= 1 && !vis[x+1][origin[x]][origin[x+1]] && dfs(x + 1))
return true;
origin[x+1] = average[x] * 3 + 1 - origin[x] - origin[x-1];
if (origin[x+1] >= 1 && !vis[x+1][origin[x]][origin[x+1]] && dfs(x + 1))
return true;
origin[x+1] = average[x] * 3 + 2 - origin[x] - origin[x-1];
return origin[x+1] >= 1 && !vis[x+1][origin[x]][origin[x+1]] && dfs(x + 1);
}
else
{
return (origin[x-1] + origin[x]) / 2 == average[x];
}
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", average + i);
for (origin[1] = 1; ; origin[1] ++)
{
origin[2] = average[1] * 2 - origin[1];
if (origin[2] >= 1 && dfs(2))
break;
origin[2] = average[1] * 2 + 1 - origin[1];
if (origin[2] >= 1 && dfs(2))
break;
}
for (int i = 1; i <= n; i++)
{
printf("%d", origin[i]);
if (i == n)
printf("\n");
else
printf(" ");
}
return 0;
}
CCF-CSP题解 201809-4 再卖菜的更多相关文章
- CCF(再卖菜60分)爆搜+记忆化搜索+差分约束
201809-4 再卖菜 我使用的是爆搜解决,只得了60分. 记忆化搜索 差分约束 #include<iostream> #include<cstdio> #include&l ...
- ccf 201809-4 再卖菜
这题一开始不知道剪枝这种操作,只会傻傻地dfs. 然后dfs递归写80分超时,非递归写70分超时(纳尼?我一直以为非递归算法在时间上会更优秀一些,为什么会这样?!!) 剪一下枝就都能过了 #inclu ...
- ccf再卖菜
https://blog.csdn.net/imotolove/article/details/82777819 记忆化搜索,还不太理解..
- [csp-201809-4]再卖菜 差分约束or记忆化搜索
先更新第一个做法:差分约束 转化成最长路,求出的每一个解是满足差分方程的最小值 spfa求最短路 对于边(x->y) 有: if(dis[y] > dis[x] + a[i].d) dis ...
- 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+ ...
- CCF CSP 201809-1 卖菜
题目链接:http://118.190.20.162/view.page?gpid=T79 问题描述 试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB ...
- CCF 201809-1 卖菜
题目: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己 ...
- csp 201809-1卖菜
问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商 ...
- CCF CSP 201609-3 炉石传说
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...
随机推荐
- ftp用户和密码
centos7 FTP修改密码: 1.查看ftp的用户:cat /etc/vsftpd/ftpusers 2.passwd ftp的用户 (输入两次) 3.重启ftp:service vsftpd r ...
- 都是为了生活组——‘’都是为了吃饭”微信小程序评价
基于NABCD评论作品,及改进建议 1.根据NABCD评论,作品的选题 N(Need,需求) 纠结症是目前在年轻人身上普遍存在着的问题,食堂食物众多,每次在吃饭前都要纠结好久,大大浪费了时间,还容易产 ...
- homebrew安装和解决brew安装速度慢的问题
homebrew安装 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/inst ...
- 新闻实时分析系统-Flume数据采集准备
Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并 ...
- DBEntry.Net 简介
[尊重作者:本文转自:http://www.cnblogs.com/lephone/] 这是我设计的一个轻量级的 .Net ORM (Object Relational Mapping) 数据访问 ...
- Pycharm报错连接linux服务器报错:Could not verify `ssh-rsa` host key with fingerprint
忘记了截图,后来解决了就懒得再去重新制造错误了.大概记得是通过ssh连接linux时,报错 Could not verify `ssh-rsa` host key with fingerprint . ...
- BeautifulSoup模块的常用方法小结
Beautiful Soup库是解析.遍历.维护“标签树”的功能库. url = "http://desk.zol.com.cn/" request = requests.get( ...
- 程序员的算法课(16)-B+树在数据库索引中的作用
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/m0_37609579/article/de ...
- AI如何驱动软件开发?华为云DevCloud 权威专家邀你探讨
近期,国际著名咨询公司Gartner 在一份研究报告中将 "AI-Driven Development" 列为 2019 年的 Top 10 Strategic Technolog ...
- CentOS7.4系统下,手动安装MySQL5.7的方法
MySQL数据库应用广泛,尤其对于JAVA程序员,不会陌生.如果在不想采购云数据库的情况下,可以自行安装MySQL数据库.文章将介绍,手动在CentOS7.4环境下,安装MySQL5.7版本的方法. ...