[vijos1159&洛谷1494]岳麓山上打水<迭代深搜>
题目链接:https://vijos.org/p/1159
https://www.luogu.org/problem/show?pid=1494
这是今天的第三道迭代深搜的题,虽然都是迭代深搜的模板,都是一些基础题,但是还是觉得自己不行啊。。。
拿到题目后我就有了一个大胆的想法
然后自己仔细斟酌之后我就pass了他。。。我原本想在dfs中来记录下有几种水桶,现在询问的是哪一个水桶,当前这个水桶选了几个。。。
然而,这个想法实在是太大胆了。。。。。。。在一番斟酌之后,我想到了一个神奇的东西叫记忆化搜索。。

这是神奇海螺告诉我的。。。对,没错,就是这个记忆化搜索。。。。
【思路】
记忆化的时候开一个数组f,f[i]表示水量i的时候能不能让水装满(或者说能不能满足题的条件),如果i能够减去我选出来的水桶并让肛♂里的水变成0.说明这个是可行滴
这也是这题里唯一需要注意的地方,这个记忆化处理实质上就是判断你选出的数能不能让水缸的水被桶接完
假如你只选了水桶3,水量变化16-13-10-7-4-1-狗带
假如选了水桶3和5,水量变化16-13-10-5-5-因吹斯听
可能这个地方有点抽象,所以要多多理解一下。。。。。。
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<vector>
#include<cmath>
#define maxn 20005
#define maxm 105
using namespace std; int v,m,ans,val[maxm],flag,a[maxm],f[maxn]; int comp(const void*a,const void*b)
{
return(*(int*)a)>(*(int*)b)?:-;
} int check(int n)
{
if(n==)return f[n]=;//如果可以把水装走
if(f[n]!=-)return f[n];//如果之前已经试过这么多水能不能装走
for(int i=;i<=ans;i++)
{
if(n>=a[i]&&check(n-a[i]))
return f[n]=;//成功装走,记录路径
}
return f[n]=;
} void dfs(int num,int sum)//第几种,有几种
{
if(sum==ans+)
{
memset(f,-,sizeof(f));
if(check(v))
{
flag=;
return ;
}
return;
}
if(flag==||num>m)return ;
a[sum]=val[num];
dfs(num+,sum+);//选第num个桶
dfs(num+,sum);//不选第num个桶,在接下来覆盖这一位
} int main()
{
scanf("%d%d",&v,&m);
for(int i=;i<=m;i++)
{
scanf("%d",&val[i]);
}
qsort(val,m+,sizeof(int),comp);
if(val[]==){
printf("1 1");return ;
}else{ for(ans=;ans<=m;ans++)
{
dfs(,);
if(flag){
printf("%d ",ans);
for(int i=;i<=ans;i++)
printf("%d ",a[i]);
return ;
}
} }
}
小小总结:我记得我学迭代深搜的时候,是和着记忆化一起学的,然后从今天的几道题看,迭代深搜经常会和记忆化一起出现。。。以后做题的时候可以多往这个方向想,而不是一些大胆的想法
[vijos1159&洛谷1494]岳麓山上打水<迭代深搜>的更多相关文章
- [vijos1159]岳麓山上打水
[vijos1159]岳麓山上打水 试题描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. ...
- 【DFS】【DP】岳麓山上打水
[vijos1159]岳麓山上打水 描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信 ...
- P1159岳麓山上打水
P1159岳麓山上打水 https://vijos.org/p/1159 dfsID,第一次听说这东西,但是感觉不太靠谱啊. 一开始的时候,想到了排个序后,然后进行dp,如果要输出字典序最小其实还是可 ...
- vijosP1159 岳麓山上打水
vijosP1159 岳麓山上打水 链接:https://vijos.org/p/1159 [思路] 迭代加深搜索+完全背包判断. 自己没有思路,看的别人代码. 总体上讲就是不断增大桶的数目并以之为上 ...
- luogu P1494 岳麓山上打水
题目描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信息组有一个容量为q升的大缸,由于 ...
- 【洛谷P1379】八数码难题(广搜、A*)
八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的. 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存. 每次扩展时再转化为矩阵. ...
- 题解【Vijos1159】岳麓山上打水
题面 迭代加深搜索模板题. 注意开始时要先对桶的容量从小到大排序. 达到搜索层数时使用完全背包\(\text{check}\)即可. 具体实现参考代码. #include <bits/stdc+ ...
- luogu P1494 岳麓山上打水 [iddfs]
题目描述 今天天气好晴朗,处处好风光,好风光!蝴蝶儿忙啊,蜜蜂也忙,信息组的同学们更加忙.最近,由于XX原因,大家不得不到岳麓山去提水.55555555~,好累啊. 信息组有一个容量为q升的大缸,由于 ...
- 洛谷 P1008 三连击 Label:水
题目描述 将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例,试求出所有满足条件的三个三位数. 输入输出格式 输入格式: 木有输入 输出格式: 若干行,每行3个 ...
随机推荐
- 前端javascript知识(三)
函数记忆,判断是不是质数. 方法一: function isPrime1(n){ if(n<=3){return true} else{ for(var i=2;i<Math.sqrt(n ...
- 零基础HTML及CSS编码总结
任务目的 针对设计稿样式进行合理的HTML架构,包括以下但不限于: * 掌握常用HTML标签的含义.用法 能够基于设计稿来合理规划HTML文档结构 理解语义化,合理地使用HTML标签来构建页面 掌握基 ...
- Object-Oriented Programming Summary Ⅳ
目录 UML单元总结博客 总结本单元两次作业的设计 总结自己在四个单元中架构设计以及OO方法理解的演进 总结自己在四个单元中测试理解与实践的演进 总结自己的课程收获 立足于自己的体会给课程组提三个具体 ...
- Ubuntu16.04如何安装bazel?
官方文档:https://docs.bazel.build/versions/master/install-ubuntu.html 我没有使用二进制的安装方法,以下是二进制的安装方法: Install ...
- 并发工具类的使用 CountDownLatch,CyclicBarrier,Semaphore,Exchanger
1.CountDownLatch 允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助. A CountDownLatch用给定的计数初始化. await方法阻塞,直到由于countDo ...
- 第四章、深入理解vue组件
4-1.使用组件的细节 a.使用is解决html出现bug 如下 table下面应该为tr,所以页面渲染的时候没有找到tr是有问题的,所以是有小bug,所以table中必须是tr b.改上面bug,t ...
- c:\Windows\system32\rundll32.exe Windows无法访问指定设备、路径或文件,你可能没有适当的权限访问该项目
非常懂如何修改权限的可以尝试,否则老老实实地重新注册的系统的.dll文件 重新注册方法如下: WIN+R下输入命令: cmd /c for %i in (%windir%\system32\*.dll ...
- mysql 学习日记 悲观和乐观锁
理解 悲观锁就是什么事情都是需要小心翼翼,生怕弄错了出大问题, 一般情况下 "增删改" 都是有事务在进行操作的,但是 "查" 是不需要事务操作的, 但是凡事没 ...
- go 广度搜索案例(迷宫)
package main import ( "fmt" "os" ) /* *将文档结构读入到切片中(二维数组) *row, col 行数 列数 (文档第一行数 ...
- Java多线程并发06——CAS与AQS
在进行更近一步的了解Java锁的知识之前,我们需要先了解与锁有关的两个概念 CAS 与 AQS.关注我的公众号「Java面典」了解更多 Java 相关知识点. CAS(Compare And Swap ...