zoukankan      html  css  js  c++  java
  • 2018.11.5 Nescafe26 T1 小猫爬山

    题目

    题目描述

    Freda 和 rainbow 饲养了 N 只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们 终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<)。

    Freda 和 rainbow 只好花钱让它们坐索道下山。索道上的缆车最大承重量为 W,而 N 只 小猫的重量分别是 C1、C2……CN。当然,每辆缆车上的小猫的重量之和不能超过 W。每 租用一辆缆车,Freda 和 rainbow 就要付 1 美元,所以他们想知道,最少需要付多少美元才 能把这 N 只小猫都运送下山?

    输入格式

    第一行包含两个用空格隔开的整数,N 和 W。

    接下来 N 行每行一个整数,其中第 i+1 行的整数表示第 i 只小猫的重量 C i。

    输出格式

    输出一个整数,最少需要多少美元,也就是最少需要多少辆缆车。

    样例输入

    5 1996

    1

    2

    1994

    12

    29

    样例输出

    2

    数据范围及约定

    对于 100%的数据,1<=N<=18,1<=C i <=W<=10^8。

    解法

    很正常的迭代加深。因为n很小所以没必要二分。

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    
    using namespace std;
    
    #define MAXN 20
    
    int n, w;
    int c[MAXN], sum;
    bool flg;
    int lc[MAXN], ans;
    
    void dfs(int x) {
        if(x == n + 1) {
            flg = true;
            return;
        }
        
        for(int i = 1; i <= ans; ++i) {
            if(c[x] + lc[i] <= w) {
                lc[i] += c[x];
                dfs(x + 1);
                lc[i] -= c[x];
                
                if(flg)
                    return;
            }
        }
    }
    
    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 = 1; i <= n; ++i) {
            scanf("%d", &c[i]);
            sum += c[i];
        }
        
        sort(c + 1, c + n + 1, cmp);
        
        for(ans = sum / w; ans <= n; ++ans) {
            dfs(1);
            if(flg) {
                printf("%d
    ", ans);
                return 0;
            }
        }
        
        fclose(stdin);
        fclose(stdout);
        
        return 0;
    }
    代码
  • 相关阅读:
    Leetcode 15 3Sum
    Leetcode 383 Ransom Note
    用i个点组成高度为不超过j的二叉树的数量。
    配对问题 小于10 1.3.5
    字符矩阵的旋转 镜面对称 1.2.2
    字符串统计 连续的某个字符的数量 1.1.4
    USACO twofive 没理解
    1002 All Roads Lead to Rome
    USACO 5.5.1 求矩形并的周长
    USACO 5.5.2 字符串的最小表示法
  • 原文地址:https://www.cnblogs.com/fl0w3r/p/9911412.html
Copyright © 2011-2022 走看看