(已经一句话了)

第一反应:暴力

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

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

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

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

  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. Ubuntu18.04安装好MySQL5.7后,root账号登录密码问题

    不知道从哪个版本开始,在Ubuntu上用apt安装MySQL后,不会提示让你设置密码了. 安装MySQL5.7 sudo apt install mysql-server -y 然后找到MySQL的配 ...

  2. vue项目引入bootstrap正确姿势

    vue如何引入bootstrap 最近在玩全栈,自然少不了vue的使用.使用vue-cli生成的项目想引入bootstrap,需要先安装相应的npm包,然后在代码中显示引入. 1.安装依赖包: cnp ...

  3. 一次Commons-HttpClient的BindException排查

    线上有个老应用,在流量增长的时候,HttpClient抛出了BindException.部分的StackTrace信息如下: java.net.BindException: Address alrea ...

  4. 【CJOJ】为了博多

    Description 做了个噩梦,梦见我的 n 把刀到60级会二次变身,变成一个 对推6图有xi点贡献,刷大阪城有yi点贡献 的刀,于是要把刀分成两队一队刷大阪城另一队推6图 . 但是有m对兄弟刀在 ...

  5. string字符串转数组

    /** * THis_is_a_cat * This Is A Cat * * Cat A Is This * @author Administrator * */ public class Test ...

  6. [Luogu2323] [HNOI2006]公路修建问题

    题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 输入输出样例 输入样例#1: 复制 4 2 5 1 2 6 5 1 3 3 1 2 3 9 4 2 4 6 1 输出 ...

  7. Spring Boot2 系列教程(十五)定义系统启动任务的两种方式

    在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...

  8. MyBatis 开发手册

    这一遍看Mybatis的原因是怀念一下去年的 10月24号我写自己第一个项目时使用全配置文件版本的MyBatis,那时我们三个人刚刚大二,说实话,当时还是觉得MyBatis挺难玩的,但是今年再看最新版 ...

  9. json::rapidjson工具

    源码地址: https://github.com/Tencent/rapidjson 可跨平台使用.将 rapidjson-master\include\rapidjson 中的 rapidjson ...

  10. linux系统状态网络、权限、用户大杂烩

    来来来,我们聊一下liunx系统相关的知识!! 首先从查询网络配置开始 ifconfig 查询.设置网卡和ip等参数 ifup,ifdown 脚本命令,更简单的方式启动关闭网络 ip命令是结合了ifc ...