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 ...
随机推荐
- JavaWeb03-请求和响应
请求响应流程图 response 1 response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServl ...
- js 日常正则
手机号 /^1((3[\d])|(4[5,6,9])|(5[0-3,5-9])|(6[5-7])|(7[0-8])|(8[1-3,5-8])|(9[1,8,9]))\d{8}$/ 大写字母 /^[A- ...
- 【集训Day3 单调队列】【2018寒假集训Day 5更新】最大子序列和
最大子序列和(maxsum) [问题描述] 输入一个长度为n的整数序列(A1,A2,……,An),从中找出一段连续的长度不超过M的子序列,使得这个序列的和最大. 例如: 序列 1, -3, 5, 1, ...
- 关于新浪和腾讯短网址API接口的调用
最新新浪t.cn短网址和腾讯url.cn短网址生成api接口,快速生成t.cn及url.cn超短链接,接口都可以正常调用,觉得不错可以收藏一下. 新浪短网址api接口:1. http://yldwz. ...
- react简单的tab切换 (styled-components)
其实,在我们日常的编程当中,经常会碰到tab切换的模块,那么,实现他的方法也有很多中,下面是一款简单,容易理解的react tab切换方法. 通过设置state中的current 属性去控制tab 和 ...
- Nginx负载均衡、SSL原理、生成SSL密钥对、Nginx配置SSL
6月12日任务 12.17 Nginx负载均衡12.18 ssl原理12.19 生成ssl密钥对12.20 Nginx配置ssl扩展 针对请求的uri来代理 http://ask.apelearn.c ...
- 【Luogu P3174 】[HAOI2009]毛毛虫
前言: 虽然很多人和我想法一样 ,但我还是不要脸地写了这题解 题目: 链接 大意: 在一棵树上取一条最长链以及它所连接的结点总共的结点个数 思路: 取链: 用树形\(DP\)就可以轻而易举的解决这个问 ...
- Java学习笔记1(基础)
计算机语言和Java 计算机语言主要由一些指令(包括数字.符号和语法等)组成,可以分为机器语言.汇编语言.高级语言三大类.Java是一种高级计算机语言,是一种可以编写跨平台应用软件.完全面向对象的程序 ...
- elk的搭建
一:准备工作 1.准备一台虚拟机 192.168.175.222 elk-node2 2.关闭防火墙以及selinux 命令:systemctl stop firewalld # ...
- luogu P1754 球迷购票问题
题目背景 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N个人手持面值1 ...