(已经一句话了)

第一反应:暴力

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

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

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

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

  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. inkscape 无法打开文档属性

    从文件->文档属性 点击了无反应 参考https://bugs.launchpad.net/inkscape/+bug/1664031 其实不是无反应,只是因为我们自己的某些操作,让文档属性这个 ...

  2. Kafka安装-Linux版

    1.   准备 1.1    Kafka Kafka版本采用0.10.2.1,下载0.10.2.1文件 http://kafka.apache.org/downloads 1.2    JDK JDK ...

  3. A-05 前向选择法和前向梯度法

    目录 前向选择法和前向梯度法 一.前向选择法 1.1 余弦相似度求投影 1.2 举例 1.3 前向选择法优缺点 1.3.1 优点 1.3.2 缺点 二.前向梯度法 2.1 举例 2.2 前向梯度法优缺 ...

  4. web 前端优化-戈多编程

    大家好,我是戈多,从事web开发工作接近三年了,今天来归纳下web前端优化的解决方案(码农搬砖工,来自各网络汇总) 1.减少Http请求 http请求越多,那么消耗的时间越多,如果在加上网络很糟糕,那 ...

  5. [JOJZ]3855.选择困难症

    [问题描述]又到吃饭时间,Polo 面对饭堂里琳(fei)琅(chang)满(keng)目(die)的各种食品,又陷入了痛苦的抉择中:该是吃手(jiao)打肉饼好呢,还是吃豆(cai)角(chong) ...

  6. python的闭包操作

    调用外函数的时候,只是存了闭包函数给flast列表,这个闭包函数并不是一个结果,个人理解而是存的是当前的环境,比如第一次循环当前的环境就是i=0,第二次循环,当前的环境就是i=1,等. 然后,真正的计 ...

  7. GUI tkinter (Entry) 输入框篇

    """1.其他函数不常用,这里只说get函数,get函数使用的时候不需要任何参数,它的返回值就是该输入框的内容.""" from tkint ...

  8. react-native开发经验

    # **RN开发经验** ## 一.环境配置关于环境配置,前辈已有完整的总结:http://tvrn.devops.letv.com/docs/Environment.html **IDE准备:** ...

  9. Python web编程 初识TCP UDP

    Python网络编程之初识TCP,UDP 这篇文章是读了<Python核心编程>第三版(Core Python Applications)的第二章网络编程后的自我总结. 如果有不到位或者错 ...

  10. 安卓控件 仪表盘控件 柱状图控件 曲线控件 xamarin.android 分类器 瓶子控件 报警控件 水箱控件 进度条控件等

    本篇博客主要介绍一个控件库,HslControls.dll 的界面,这个控件库支持winform,winform的参考另一篇文章:https://www.cnblogs.com/dathlin/p/1 ...