zoukankan      html  css  js  c++  java
  • ACM 背包 饭卡

    A - 饭卡
    Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u
    Submit Status

    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
     
     
    纠结了好久~没写出来,先用别人的代码吧,看懂了
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <cstdio>
    
    using namespace std;
    
    int main()
    {
        int n;
        int m;
        int value[1005];
        int dp[1005];
        while(scanf("%d",&n) && n != 0)
        {
            for(int i = 1; i <= n; i++)
            {
                scanf("%d",&value[i]);
            }
            sort(value+1,value+n+1);
            scanf("%d",&m);
            memset(dp,0,sizeof(dp));
            if(m < 5)
            {
                printf("%d
    ",m);
            }
            else
            {
                for(int i = 1; i < n; i++)
                {
                    for(int v = m - 5; v >= value[i]; v--)
                    {
                        dp[v] = max(dp[v - value[i]] + value[i], dp[v]);
                    }
                }
                printf("%d
    ",m - dp[m - 5] - value[n]);
            }
        }
        return 0;
    }
  • 相关阅读:
    关于grunt
    关于网页上标题图标显示
    form表单原理
    js判断是android访问还是ios访问
    判断客户端是手机访问还是电脑访问网站(php代码)
    电脑手机模拟器模拟手机浏览器,在线浏览手机网站
    手机网站通过JS判断是否为iPhone手机访问
    手机页面一键拨号
    html5手机网站常用的9个CSS属性
    js解析与序列化json数据(一)json.stringify()的基本用法
  • 原文地址:https://www.cnblogs.com/wejex/p/3232802.html
Copyright © 2011-2022 走看看