ccf 201809-4 再卖菜
这题一开始不知道剪枝这种操作,只会傻傻地dfs。
然后dfs递归写80分超时,非递归写70分超时(纳尼?我一直以为非递归算法在时间上会更优秀一些,为什么会这样?!!)
剪一下枝就都能过了
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
int a[],b[];
bool vis[][][];
int n;
bool dfs(int step)
{
if(step==n&&a[n-]==(b[n-]+b[n-])/)return ;
else if(step==n)return ;
if(step==){
for(int i=;;i++){
b[step]=i;
if(dfs(step+))return ;
}
}
int k=;
if(step==)k-=;
for(int i=a[step-]*k;i<a[step-]*k+k;i++){
b[step]=i-b[step-];
if(k==)b[step]-=b[step-];
if(vis[step][b[step-]][b[step]])continue;
else vis[step][b[step-]][b[step]]=;
if(b[step]>&&dfs(step+))return ;
}
return ;
}
int main()
{
cin>>n;
for(int i=;i<n;i++)scanf("%d",a+i);
dfs();
cout<<b[];
for(int i=;i<n;i++)printf(" %d",b[i]);
return ;
}
递归算法
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
typedef long long ll;
int a[],b[],k[],i[];
bool vis[][][];
int n;
void dfs(int step=)
{
stack<int>st;
st.push(step);
while(){
step=st.top();
if(step==n&&a[n-]==(b[n-]+b[n-])/)return;
else if(step==n){
st.pop();
continue;
}
if(step==){
b[step]+=;
st.push(step+);
continue;
}
i[step]++;
if(!k[step]){
k[step]=;
if(step==)k[step]-=;
i[step]=a[step-]*k[step];
}
if(i[step]<a[step-]*k[step]+k[step]){
b[step]=i[step]-b[step-];
if(k[step]==)b[step]-=b[step-];
if(vis[step][b[step-]][b[step]])continue;
else vis[step][b[step-]][b[step]]=;
if(b[step]>)st.push(step+);
}
else{
st.pop();
k[step]=;
}
}
}
int main()
{
cin>>n;
for(int i=;i<n;i++)scanf("%d",a+i);
dfs();
cout<<b[];
for(int i=;i<n;i++)printf(" %d",b[i]);
return ;
}
非递归算法
ccf 201809-4 再卖菜的更多相关文章
- CCF(再卖菜60分)爆搜+记忆化搜索+差分约束
201809-4 再卖菜 我使用的是爆搜解决,只得了60分. 记忆化搜索 差分约束 #include<iostream> #include<cstdio> #include&l ...
- 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-CSP题解 201809-4 再卖菜
碎碎念..近视加老花,还以为第二天除了第二家范围在100以内别的都不确定,于是x**算的记搜复杂度超时了.还鼓捣着什么差分区间最长路,虽然有大神用差分区间做出来了,然而自己并没有看懂. 其实就是一个记 ...
- 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 201809-1 卖菜
题目: 问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己 ...
- CCF CSP 201809-1 卖菜
题目链接:http://118.190.20.162/view.page?gpid=T79 问题描述 试题编号: 201809-1 试题名称: 卖菜 时间限制: 1.0s 内存限制: 256.0MB ...
- 天朝屁民每天做T跟菜贩一样,进菜-卖菜,为伟大的菜贩精神点赞
天朝屁民每天做T跟菜贩一样,进菜-卖菜,为伟大的菜贩精神点赞
- csp 201809-1卖菜
问题描述 在一条街上有n个卖菜的商店,按1至n的顺序排成一排,这些商店都卖一种蔬菜. 第一天,每个商店都自己定了一个价格.店主们希望自己的菜价和其他商店的一致,第二天,每一家商店都会根据他自己和相邻商 ...
随机推荐
- BZOJ 1061:志愿者招募(单纯型)
题目链接 题意 中文题意. 思路 单纯型模板题. 单纯型用来解决线性规划问题. 留坑待填. 算法思路 好长 模板 论文 卿学姐视频 #include <bits/stdc++.h> usi ...
- HDU 5113:Black And White(DFS)
题目链接 题意 给出一个n*m的图,现在有k种颜色让你对这个图每个格子染色,每种颜色最多可以使用col[i]次,问是否存在一种染色方案使得相邻格子的颜色不同. 思路 以为是构造题,结果是爆搜.对于每一 ...
- 洛谷P1003 铺地毯 noip2011提高组day1T1
洛谷P1003 铺地毯 noip2011提高组day1T1 洛谷原题 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n ...
- 主机地址变更后,dubbo请求时依旧会寻址旧IP的问题
机房迁移,导致测试服务器IP变更,比原于IP为192.168.1.105变更为10.1.9.120. 服务源码未做任何变更,启动服务时依旧是旧地址请求,此问题由dubbo本地注册中心的缓存所致,清理掉 ...
- dockerfile 制作镜像
# Set the base image to UbuntuFROM ubuntu # File Author chenghanMAINTAINER chenghan ################ ...
- python爬虫常用正则表达式组合匹配
["\']匹配什么?(.*?)匹配什么? ["\'] ----------- 匹配单双引号 (.*?)xxx ----------- 匹配任意长度字符+xxx ...
- Excel催化剂开源第21波-使用Advanced Installer打包VSTO几个注意问题
STO项目开发完毕完,最终需要分发给用户,需要Excel催化剂用的是Clickonce发布方式,但也面临到部分用户环境要求太高,设置过程太繁锁,而要求有一些简单的安装方式,用打包工具将其打包为一个EX ...
- MYSQL数据库的安装,配置文件,登入
07.13自我总结 MYSQL数据库 一.MYQL数据库的安装 可以去mysql官网下载mysql压缩包 运行程序:在bin文件夹中,其中客户端运行文件是mysql.exe,服务端运行文件为mysql ...
- springboot4自动配置的原理(浅层)
自动配置的原理(浅层) @Configuration //这是一个配置类 @EnableConfigurationProperties(HttpProperties.class)//启用Configu ...
- 关于RedirectAttributes 重定向带参数请求问题
@RequestMapping("/delete") public String delete(String id, RedirectAttributes redirectAttr ...