zoukankan      html  css  js  c++  java
  • HDU 2546 饭卡(dp)

    饭卡

    Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 36386    Accepted Submission(s): 12505


    Problem Description
    电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。
    某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。
     
    Input
    多组数据。对于每组数据:
    第一行为正整数n,表示菜的数量。n<=1000。
    第二行包括n个正整数,表示每种菜的价格。价格不超过50。
    第三行包括一个正整数m,表示卡上的余额。m<=1000。

    n=0表示数据结束。
     
    Output
    对于每组输入,输出一行,包含一个整数,表示卡上可能的最小余额。
     
    Sample Input
    1 50 5 10 1 2 3 2 1 1 2 3 2 1 50 0
     
    Sample Output
    -45 32
     

       这条题目里,我们要先注意要达到最小余额,那么最大的菜价一定是最后要减的,那么我们将这一组饭菜价格按从小到大排序,将最大的那个先放一边,我们接下来就是要把剩下的一些菜价用我们手头的余额减,当然必须要保证减去的金额小于等于sum-5,这样我们才能在最后一次把最大的菜价刷掉。

        我们做的转化就是,把除了最大菜价之外,其他的菜价装入一个sum-5 的背包里,看最大能装多少。

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    using namespace std;
    bool cmp(int a,int b)
    {
        return a < b;
    }
    int main()
    {
        int n, m;
        int dp[1005];
        int v[1005];
        while (cin >> n && n)
        {
            int i, j;
            int mmm = 0;
            memset(dp, 0, sizeof(dp));
            for (i = 1; i <= n; i++)
            {
                cin >> v[i];
            }
            cin >> m;
            sort(v + 1, v + n + 1, cmp);//排个序
            for (i = 1; i <= n - 1; i++)//先把v[n]挑出来
            {//01背包,在容量为m-5的背包里放尽量多的菜
                for (j = m - 5; j >= v[i]; j--)
                {
                    dp[j] = max(dp[j], dp[j - v[i]] + v[i]);
    
                }
            }
            if (m < 5) cout << m << endl;//一开始忘记考虑了
            else cout << m - dp[m - 5] - v[n] << endl;//最后减去v【n】
        }
        return 0;
    }
     
     
  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13271308.html
Copyright © 2011-2022 走看看