题目链接: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 ;
}
} }
}

小小总结:我记得我学迭代深搜的时候,是和着记忆化一起学的,然后从今天的几道题看,迭代深搜经常会和记忆化一起出现。。。以后做题的时候可以多往这个方向想,而不是一些大胆的想法

最新文章

  1. 几种通过JDBC操作数据库的方法,以及返回数据的处理
  2. tableView中cell的重用机制
  3. QT 网络编程二(UDP版本)
  4. centos7编译安装pure-ftpd-1.0.42
  5. BASH相关
  6. MFC编程基础
  7. 你不知道的JavaScript--大白话讲解Promise
  8. python 可变参数
  9. poll实现
  10. (int)、(int&amp;)和(int*)的区别(转)
  11. jdk1.6下载页面
  12. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 2
  13. Hibernate-day02
  14. MySQL的连接数
  15. Codeforces 1114 - A/B/C/D/E/F - (Undone)
  16. java-保留x个小数位
  17. JVM(二)JVM的结构
  18. Only IPV6 下 使用MSDTC ping 之后 出现 找不到主机的问题
  19. trace sql log
  20. 网络流量统计using ADB

热门文章

  1. html+css布局类型
  2. mupdf 基于命令行的 pdf转图片
  3. Windows环境下docker的安装与配置
  4. PHP攻击网站防御代码-以及攻击代码反译
  5. django 从零开始 4 404页面和500页面设置
  6. 学习 CSS 之用 CSS 3D 实现炫酷效果
  7. 【分布式锁】02-使用Redisson实现公平锁原理
  8. Python 3.9 新特性:任意表达式可作为装饰器!
  9. Redis为什么这么快?
  10. 性能测试从零开始-LoadRunner入门