zoukankan      html  css  js  c++  java
  • HDU 2564 饭卡

    饭卡

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


    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
    注意读题
    小于5是什么都买不了,大于5时,先买一个最贵的,若
    直接小于0,直接输出
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    #include <cmath>
    #include <vector>
    #include <algorithm>
    using namespace std;
    #define lowbit(x) (x&(-x))
    #define max(x,y) (x>y?x:y)
    #define min(x,y) (x<y?x:y)
    #define MAX 100000000000000000
    #define MOD 1000000007
    #define PI 3.141592653589793238462
    #define INF 1000000000
    #define mem(a) (memset(a,0,sizeof(a)))
    typedef long long ll;
    ll dp[1100],a[1006];
    ll n,v;
    int main()
    {
        while(scanf("%d",&n) && n)
        {
            mem(dp);
            for(int i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
            }
            scanf("%d",&v);
            if(v<5)
            {
                printf("%d
    ",v);
                continue;
            }
            sort(a,a+n);
            int m=v-5;//买最贵的
            if(m<0)
            {
                printf("%d
    ",m);
                continue;
            }
            for(int i=0;i<n-1;i++)
            {
                for(int j=m;j>=a[i];j--)
                {
                    dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
                }
            }
            printf("%d
    ",v-dp[m]-a[n-1]);
        }
        return 0;
    }
  • 相关阅读:
    fullCalendar改造计划之带农历节气节假日的万年历(转)
    Linked List Cycle
    Remove Nth Node From End of List
    Binary Tree Inorder Traversal
    Unique Binary Search Trees
    Binary Tree Level Order Traversal
    Binary Tree Level Order Traversal II
    Plus One
    Remove Duplicates from Sorted List
    Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7192920.html
Copyright © 2011-2022 走看看