(已经一句话了)

第一反应:暴力

第二反应:朴素算法过不去

第三反应:没法折半暴搜(没法统计答案)

所以,歪歪了一个类似贪心刷表的方法,过了这道题。

首先,如果爆搜的话会有几个状态:

  1. 当前牛
  2. 当前几个箱子
  3. 当前的牛数量

而且它的复杂度是阶乘级别。

发现这道题目有显然单调性(答案处在分界线,-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]摩天大楼里的奶牛(迭代加深搜索)的更多相关文章

  1. 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛 [迭代加深搜索]

    题目传送门 摩天大楼里的奶牛 题目描述 A little known fact about Bessie and friends is that they love stair climbing ra ...

  2. 洛谷P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ...

  3. 洛谷 P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...

  4. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    题目描述 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 输入格式: Line 1: N and W separated by a spa ...

  5. P3052 [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 状压dp

    这个状压dp其实很明显,n < 18写在前面了当然是状压.状态其实也很好想,但是有点问题,就是如何判断空间是否够大. 再单开一个g数组,存剩余空间就行了. 题干: 题目描述 A little k ...

  6. 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 ...

  7. [USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper

    洛谷题目链接:[USACO12MAR]摩天大楼里的奶牛Cows in a Skyscraper 题目描述 A little known fact about Bessie and friends is ...

  8. [USACO12MAR] 摩天大楼里的奶牛 Cows in a Skyscraper

    题目描述 A little known fact about Bessie and friends is that they love stair climbing races. A better k ...

  9. [USACO12MAR]摩天大楼里的奶牛(状态压缩DP)

    题意 给出n个物品,体积为w[i],现把其分成若干组,要求每组总体积<=W,问最小分组.(n<=18) 题解 一看以为是弱智题.(可能真的是,我太菜了) 然后跟walthou夸下海口:这么 ...

随机推荐

  1. document.body.scrollTop等常见易混淆属性整理

        网页可见区域宽: document.body.clientWidth;   网页可见区域宽: document.body.offsetWidth (包括边线的宽);   网页可见区域高: do ...

  2. 网络游戏开发-客户端2(自定义websocket协议格式)

    Egret官方提供了一个Websocket的库,可以让我们方便的和服务器长连接交互. 标题写的时候自定义websocket的协议格式.解释一下,不是说我们去动websocket本身的东西,我们是在we ...

  3. 寻找子串位置<codevs>

    KMP板子题; 如果不会可以参考其他算法书 代码: #include<iostream> #include<stdio.h> #include<stdlib.h> ...

  4. 基于Matlab/Simulink的模型开发(连载一)

    概述 基于模型的开发将省去繁琐的代码编写步骤,只需要拖动几个模块,就像搭积木一般,轻松搭建您自己的飞控算法.飞控开发人员可以将更多的精力放在算法本身,而不需要过多关注代码实现的细节,这样将大大加快开发 ...

  5. Python中的可变对象与不可变对象、浅拷贝与深拷贝

    Python中的对象分为可变与不可变,有必要了解一下,这会影响到python对象的赋值与拷贝.而拷贝也有深浅之别. 不可变对象 简单说就是某个对象存放在内存中,这块内存中的值是不能改变的,变量指向这块 ...

  6. (图解)windows下自定义Eclipse主题

    之前用过一些编辑器如SublimeText,IDE如phpstorm,IDEA等:这些工具给我的感觉就是,除了给予这些工具应有的功能外,给予开发者更友好,更舒服的界面.Eclipse很早就开始使用了, ...

  7. 浏览器渗透框架BeEF使用笔记(一)

    0x00 前言 BeEF,全称The Browser Exploitation Framework,是一款针对浏览器的渗透测试工具. 用Ruby语言开发的,Kali中默认安装的一个模块,用于实现对XS ...

  8. netty中Pipeline的ChannelHandler执行顺序案例详解

    一.netty的Pipeline模型 netty的Pipeline模型用的是责任链设计模式,当boss线程监控到绑定端口上有accept事件,此时会为该socket连接实例化Pipeline,并将In ...

  9. 利用python模拟菜刀反弹shell绕过限制

    有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行 from sock ...

  10. 2、Struts2开始深入

    一.Struts2的配置文件加载顺序 1 .进入过滤器[StrutsPrepareAndExecuteFilter]跟代码,可以看到对应的文件加载顺序 进入StrtsPrepareAndExecute ...