CODEVS 4228 小猫爬山

//By DXY 2018.04.27
#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
using namespace std;
#define maxn 100000
int n,m,ans;
int d[maxn],v[maxn];
void dfs(int now,int cnt)//处理第now只猫,已经租了cnt辆车
{
    if(cnt>=ans)//剪枝,不可能更新最优解
    {
        return ;
    }
    if(now==n+1)//比较并更新最优解
    {
        ans=min(ans,cnt);
        return ;
    }
    for(int i=1;i<=cnt;i++)
    {
        if(d[i]+v[now]<=m)//如果能装就装
        {
            d[i]+=v[now];
            dfs(now+1,cnt);
            d[i]-=v[now];//回溯,还原现场
        }
    }
    d[cnt+1]=v[now];
    dfs(now+1,cnt+1);//不能装下,再租一辆
    d[cnt+1]=0;//回溯,还原现场
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&v[i]);
    sort(v+1,v+1+n);//从小到大排序
    //较重的比较轻的更难运送,按递减排序
    reverse(v+1,v+1+n);//翻转函数,把函数变成了从大到小排序
    ans=n;//最多需要n辆
    dfs(1,0);
    cout<<ans<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/Dxy0310/p/9534219.html

时间: 2024-10-06 19:34:01

CODEVS 4228 小猫爬山的相关文章

tyvj P2018 「Nescaf&#233;26」小猫爬山 解题报告

P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 描述 Freda和rainbow只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2……CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租用一辆缆车,Freda和rainb

TyvjP2018 「Nescaf&#233;26」小猫爬山

P2018 「Nescafé26」小猫爬山 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 描述 Freda和rainbow只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2……CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租用一辆缆车,Freda和rainb

洛谷——P1361 小猫爬山

https://www.luogu.org/problem/show?pid=1361#sub 题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2……CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租用一辆缆车,WD和LHX就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山? 输入输出格

洛谷 P1361 小猫爬山

题目描述 WD和LHX饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. WD和LHX只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2……CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租用一辆缆车,WD和LHX就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山? 输入输出格式 输入格式: 第一行包含两个用空格隔开的整数,N和W. 接下来N行每行一个整数,其中第i+1行

小猫爬山(深搜)

背景 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 描述 Freda和rainbow只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2--CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山? 输入格式 第一行包含两个用空格隔开的整数,N和

小猫爬山

题目描述 Freda和rainbow饲养了N只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<).Freda和rainbow只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2--CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租用一辆缆车,Freda和rainbow就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山? 输入 第一行包含两个用空格隔开的整数,N和W.接下

小猫爬山题解(暴力解题)

[问题描述] Freda 和 rainbow 饲养了 N 只小猫,这天,小猫们要去爬山.经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了. Freda 和 rainbow 只好花钱让它们坐索道下山.索道上的缆车最大承重量为W,而N 只 小猫的重量分别是C1.C2……CN.当然,每辆缆车上的小猫的重量之和不能超过W.每租 用一辆缆车,Freda 和 rainbow 就要付 1 美元,所以他们想知道,最少需要付多少美元才能 把这 N 只小猫都运送下山? [输入格式] 第一行

Acwing 165. 小猫爬山

翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆车最大承重量为W,而N只小猫的重量分别是C1.C2……CN. 当然,每辆缆车上的小猫的重量之和不能超过W. 每租用一辆缆车,翰翰和达达就要付1美元,所以他们想知道,最少需要付多少美元才能把这N只小猫都运送下山? 输入格式 第1行:包含两个用空格隔开的整数,N和W. 第2..N+1行:每行一个整数,其中第i+1

【CH2201】小猫爬山

一道很基础的深搜题,数据范围不大,稍加剪枝即可通过. 将重量降序排列,对于已经选了的车,尝试当前的猫能不能坐,如果全部尝试失败,则另用一辆车. 1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 typedef long long ll; 5 inline int read() { 6 int ret=0,f=1; 7 char c=getchar(); 8 while(c<'0'|