博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[IDDFS+背包] 洛谷P2744 [USACO5.3]量取牛奶Milk Measuring
阅读量:4677 次
发布时间:2019-06-09

本文共 1150 字,大约阅读时间需要 3 分钟。

折腾了好几天的题目,简单讲讲心得。

  • 首先看了题解才写出来的,因为有一个核心的一点没想到,用桶的数量当 迭代加深搜索的层数,算是长见识了~
  • 每次dp数组的初始化自己手动赋值0,不然会TLE一个点。

思路: 以桶的数量作为深度,做IDDFS,每次用背包DP判断当前是否可行。在一定有解的情况下,那么这个思路是一定能求出答案的(这不是屁话吗?

 

#include 
#include
#include
int q,n,bucket[105];int v[105];int limit;bool dp[23333];bool vis[122];bool Can(){ memset(dp,0,sizeof(dp)); dp[0] = 1; for(int i=1;i<=limit;i++){ for(int j=v[i];j<=q;j++){ dp[j]+=dp[j-v[i]]; } } if(dp[q]) return true; return false;}void dfs(int pos){ if(pos > limit ){ if( Can() ){ printf("%d\n",limit); for(int i=1;i<=limit;i++) printf("%d ",v[i]); exit(0); } return; } for(int i=1;i<=n;i++){ if( !vis[i] ){ vis[i] = 1; v[pos] = bucket[i]; dfs(pos+1); vis[i] = 0; } }}int main(){ scanf("%d",&q); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&bucket[i]); std::sort(bucket+1,bucket+1+n); for(int i=1;i<=n;i++){ limit = i; dfs(1); } return 0;}

 

转载于:https://www.cnblogs.com/OIerLYF/p/7792592.html

你可能感兴趣的文章
Contact Form 7邮件发送失败的解决办法
查看>>
P1800 software_NOI导刊2010提高(06)
查看>>
Python学习日记(1)使用if __name__ == "main"
查看>>
二进制的最大公约数
查看>>
Mybatis学习笔记(一) 之框架原理
查看>>
ABSTRACT的方法是否可同时是STATIC,是否可同时是NATIVE,是否可同时是SYNCHRONIZED?
查看>>
【SPL标准库专题(10)】SPL Exceptions
查看>>
《Python从入门基础到实践》
查看>>
【读入优化】
查看>>
python-网络编程urllib模块
查看>>
0029 Java学习笔记-面向对象-枚举类
查看>>
CGRectGet *** 获取控件坐标的方法
查看>>
SQL的主键和外键约束
查看>>
Bookmarklet
查看>>
c++primer 第l六章编程练习答案
查看>>
上海秋季HCC小记
查看>>
Illustrator 上色
查看>>
truncate表恢复
查看>>
this关键字的使用
查看>>
Console.Read()、Console.ReadLine()、Console.ReadKey()
查看>>