P3052 [USACO12MAR]摩天大楼里的奶牛(迭代加深搜索)

(已经一句话了)
第一反应:暴力
第二反应:朴素算法过不去
第三反应:没法折半暴搜(没法统计答案)
所以,歪歪了一个类似贪心刷表的方法,过了这道题。
首先,如果爆搜的话会有几个状态:
- 当前牛
- 当前几个箱子
- 当前的牛数量
而且它的复杂度是阶乘级别。
发现这道题目有显然单调性(答案处在分界线,-1不合法,+1不是最优)所以歪歪了一个类似二分check的dfs方法。
那么状态就得改变了。传入的还是牛的编号,但是,在dfs内部,枚举的是当前的牛放在哪个箱子里。如果能搜到最后一步,就返回。
于是乎,这样dfs可能会搜很多没用的,(例如答案是2,但是会搜9,4,2),而且范围非常小,可以直接枚举),搜到就跳出,输出。
这个就是迭代加深了。这里把这个词拆开,一个是迭代(这里就是指枚举答案),加深就是在一次一次加深状态。
于是给出代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=;
int n,w;
int ans;
int a[maxn];
int vis[maxn];
int flag=;
int f[maxn];
void dfs(int x)
{
if(x==n)
{
flag=;
return;
}
for(int i=;i<=ans;i++)
{
if(f[i]+a[x]<=w)
{
f[i]+=a[x];
dfs(x+);
f[i]-=a[x];
if(flag)
return;
}
}
}
int mx=;
bool cmp(int a,int b)
{return a>b;}
int main()
{
//freopen("catclimb.in","r",stdin);
//freopen("catclimb.out","w",stdout);
scanf("%d%d",&n,&w);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
mx+=a[i];
}
sort(a+,a+n+);
for(ans=mx%w==? mx/w:mx/w+;ans<=;ans++)
{
dfs();
if(flag==)
{
printf("%d",ans);
return ;
}
}
return ;
}
P3052 [USACO12MAR]摩天大楼里的奶牛(迭代加深搜索)的更多相关文章
- 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛 [迭代加深搜索]
		题目传送门 摩天大楼里的奶牛 题目描述 A little known fact about Bessie and friends is that they love stair climbing ra ... 
- 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
		P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ... 
- 洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
		题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ... 
- P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
		题目描述 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 输入格式: Line 1: N and W separated by a spa ... 
- P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 状压dp
		这个状压dp其实很明显,n < 18写在前面了当然是状压.状态其实也很好想,但是有点问题,就是如何判断空间是否够大. 再单开一个g数组,存剩余空间就行了. 题干: 题目描述 A little k ... 
- LUOGU P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
		题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ... 
- [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper
		洛谷题目链接:[USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ... 
- [USACO12MAR] 摩天大楼里的奶牛 Cows in a Skyscraper
		题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ... 
- [USACO12MAR]摩天大楼里的奶牛(状态压缩DP)
		题意 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 题解 一看以为是弱智题.(可能真的是,我太菜了) 然后跟walthou夸下海口:这么 ... 
随机推荐
- MySQL 配置环境
			MySQL 显示 Can't connect to MySQL server on 'localhost' (10061)怎么解决 在cmd中配置启动sql后,找不到密码.然后怎么也没办法弄,不知道怎 ... 
- IP的分类以及子网划分、网络设置
			前言 整个因特网就是一个单一的.抽象的的网络.IP地址就是给因特网上的每一个主机(或路由器)的每一个接口分配一个在全世界范围是唯一的32位的标识符.IP地址的结构使我们可以在因特网上很方便的进行寻址. ... 
- 我们一起学Python之——认识Python"规则"
			前言: 开学后,跟预想的一样,开学第一天我们就开了Python,虽然之前早就预料到了,但对于一直学Java的我来说,内心还是有一些涟漪的.总归还是要接受的,还不如振作起来,认真对待.我决定从最简单并且 ... 
- 2.1实现简单基础的vector
			2.1实现简单基础的vector 1.设计API 我们参考下C++ <std> 库中的vector, vector中的api很多,所以我们把里面用的频率很高的函数实现; 1.1 new&a ... 
- django-Xadmin后台管理
			0919自我总结 django-Xadmin后台管理 一.安装环境 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 ... 
- boost::VS2017下编译和配置boost库
			环境: win10 vs2017 v141 1.下载 boost_1_70_0.zip. 2.以管理员方式打开 3. bootstrap.bat 4.编译64位库 b2.exe stage -- ... 
- selenium-模块概述(1)
			Selenium是一个用于Web应用程序自动化测试工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样. 1.目录结构如下: D:\soft\python36\Lib\site-pa ... 
- spring boot配置Servlet容器
			Spring boot 默认使用Tomcat作为嵌入式Servlet容器,只需要引入spring-boot-start-web依赖,默认采用的Tomcat作为容器 01 定制和修改Servlet容器 ... 
- itextsharp生成pdf
			itextsharp在ios中可用,亲测 (一)生成文档 Document document = , , , ), , , , ); //Document document = new Documen ... 
- 游图邦YOTUBANG是如何搭建生态系统的?
			现在的我们最关心的一个问题就是任何一个行业,如果没有办法很好的落地,就算描绘的非常美好,那也只是空中楼阁.昙花一现而已,它无法实现长久的一个发展.互联网时代呢,就是一个流量为王的一个时代,谁拥有庞大的 ... 
