zoukankan      html  css  js  c++  java
  • 牛客假日团队赛6 C:Bookshelf 2

    链接:https://ac.nowcoder.com/acm/contest/993/C
    来源:牛客网
     

    题目描述

    Farmer John recently bought another bookshelf for the cow library, but the shelf is getting filled up quite quickly, and now the only available space is at the top.
    FJ has N cows (1 <= N <= 20) each with some height of Hi (1 <= Hi <= 1,000,000 - these are very tall cows). The bookshelf has a height of B (1 <= B <= S, where S is the sum of the heights of all cows).
    To reach the top of the bookshelf, one or more of the cows can stand on top of each other in a stack, so that their total height is the sum of each of their individual heights. This total height must be no less than the height of the bookshelf in order for the cows to reach the top.
    Since a taller stack of cows than necessary can be dangerous, your job is to find the set of cows that produces a stack of the smallest height possible such that the stack can reach the bookshelf. Your program should print the minimal 'excess' height between the optimal stack of cows and the bookshelf.

    输入描述:

    * Line 1: Two space-separated integers: N and B
    * Lines 2..N+1: Line i+1 contains a single integer: Hi

    输出描述:

    * Line 1: A single integer representing the (non-negative) difference between the total height of the optimal set of cows and the height of the shelf.

    示例1

    输入

    复制

    5 16
    3
    1
    3
    5
    6

    输出

    复制

    1

    说明

    Here we use cows 1, 3, 4, and 5, for a total height of 3 + 3 + 5 + 6 = 17.
    It is not possible to obtain a total height of 16, so the answer is 1.

    题意分析:

    每个牛都有一个高度,一头牛可以站在其他牛上,这样它们的高度就是高度之和

    应该是一群牛要上顶层,要把一部分牛堆起来,要能够上顶层,累加起来的高度必须大于给出的书架高度,为了保证安全,高度在大于书架更高度的同时应该尽量低,求最低的和书架高的差。

    解题思路:

    暴力深搜

    #include <stdio.h>
    #include <algorithm>
    using namespace  std;
    #define N 50
    int a[N], book[N], b, n, ans;
    void dfs(int x, int sum)
    {
    	int i;
    	if (sum - b >= 0)
    		ans = min(ans, sum - b);
    	if (x == n + 1)
    		return ;
    	for (i = 0; i <= 1; i++)
    	{
    		sum += a[x] * i;
    		dfs(x + 1, sum);
    		//sum -= a[x] * i;
    	}
    	return ;
    }
    int main()
    {
    	int i;
    	scanf("%d%d", &n, &b);
    	for (i = 1; i <= n; i++)
    		scanf("%d", &a[i]);
    	ans = 99999999;
    	dfs(1, 0);
    	printf("%d
    ", ans);
    	return 0;
    }
  • 相关阅读:
    LLVM 3.0 — LinuxTOY
    Fabric Engine 1.0
    tmux:GNU screen 替代品 — LinuxTOY
    LuoYun 开源云计算平台软件 0.2 Beta 版本发布 — LinuxTOY
    迅雷离线下载脚本 — LinuxTOY
    Vim 状态栏是 Powerline 插件。
    LuoYun 云计算平台 0.4 版本 liveCD 发布
    webOS Isis 开源 — LinuxTOY
    Impress.js — LinuxTOY
    从 screen 切换到 tmux — LinuxTOY
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852595.html
Copyright © 2011-2022 走看看