zoukankan      html  css  js  c++  java
  • hdu 2546 饭卡 01背包

    饭卡

    问题描述 :

    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
    某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。

    输入:

    多组数据。对于每组数据:
    第一行为正整数n,表示菜的数量。n<=1000。
    第二行包括n个正整数,表示每种菜的价格。价格不超过50。
    第三行包括一个正整数m,表示卡上的余额。m<=1000。

    n=0表示数据结束。

    输出:

    多组数据。对于每组数据:
    第一行为正整数n,表示菜的数量。n<=1000。
    第二行包括n个正整数,表示每种菜的价格。价格不超过50。
    第三行包括一个正整数m,表示卡上的余额。m<=1000。

    n=0表示数据结束。

    样例输入:

    1
    50
    5
    10
    1 2 3 2 1 1 2 3 2 1
    50
    0

    样例输出:

    -45
    32

    http://acm.hdu.edu.cn/showproblem.php?pid=2546

    通过题目的讲解我们大致上得到以下思路:

    先排一个序,或者直接找到最大值,将最大值取出,在剩余的n-1个数中,找到一个组合,使得他们的和尽量接近m-5,找到后用m减去这个数和最大数,就可以求出最大的负值。

    所以,该问题隐藏着一个经典的问题:从n个数中选m个使得他们的和尽可能的接近x

    这个问题非常简洁,但是各大公司都喜欢考,搜狐面试,搜狗笔试都考过这个题。

    那么如何解决呢?

    因为尽量接近x所以想到了背包的容量,如果有一个背包的容量为x向其中加入n个物品,物品的价值和体积看成一样,这样的话,体积不会超过m,而与之等值的价值取到最大,这不就是最接近x吗?

    解题转自:http://www.cnblogs.com/plank-george-zzo/archive/2013/08/14/3256720.html

    代码如下:

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    int f[1005],a[1005];
    
    int max(int x,int y)
    {
        return x>y?x:y;
    }
    
    int main()
    {
        int n,V,i,j;
        while(scanf("%d",&n)&&n!=0){
            memset(f,0,sizeof(f));
            memset(a,0,sizeof(a));
            for(i=1;i<=n;i++){
                scanf("%d",&a[i]);
            }
            sort(a+1,a+n+1);
            scanf("%d",&V);
            for(i=1;i<=n-1;i++){
                for(j=V-5;j>=0;j--){
                    if(j-a[i]>=0){
                        f[j]=max(f[j],f[j-a[i]]+a[i]);
                    }
                }
            }
            if(V<5) printf("%d
    ",V);
            else printf("%d
    ",V-f[V-5]-a[n]);
        }
        return 0;
    }
  • 相关阅读:
    从亚马逊、微软、谷歌的云之争,看国内云计算的未来
    即使是菜鸟,也能配置出一个网站
    为什么软件开发周期通常是预期的两三倍?
    2015-2016前端知识体系
    UOJ269【清华集训2016】如何优雅地求和【数论,多项式】
    LOJ166 拉格朗日插值 2【卷积,NTT】
    CF1140F Extending Set of Points 【按时间分治,并查集】
    CF1168C And Reachability 【构造,dp】
    CF1182F Maximum Sine【类欧,扩欧】
    牛客 可见山峰对数量(进阶)
  • 原文地址:https://www.cnblogs.com/yzm10/p/7356608.html
Copyright © 2011-2022 走看看