zoukankan      html  css  js  c++  java
  • hdu-2546 饭卡

    题目

    hdu-2546

    分析

    余额>=5就可以买任何商品(购买后余额可以为负),余额<5则不能购买任何商品,即使余额足够支付.
    目标是使卡上的余额最少

    这实际上是一个变形的背包问题,背包的容量就是卡上的余额而我们的目标就是尽量装满背包.

    可以将背包的容量视为m-5,且去掉菜谱里最贵的菜,这样就是纯粹的01背包问题

    AC代码

    #include "bits/stdc++.h"
    using namespace std;
    int a[1010], f[1010];
    int main(int argc, char const *argv[])
    {
        int n, m, i, v;
        while(cin >> n && n){
            for(i = 0; i<n; i++)
                cin >> a[i];
            cin >> m;
            int V = m - 5;
            if(V<0){
                cout << m << endl;
                continue;
            }
            memset(f, 0, sizeof(f));
            int ans = 0, ansi;
            //找到并去掉最贵的菜
            for(i = 0; i<n; i++){
                if(a[i] > ans){
                    ans = a[i];
                    ansi=i;
                }
            }
            a[ansi] = 0;
            for(i=0;i<n;i++){
                for(v=V;v>=a[i];v--){//01背包
                    f[v] = max(f[v], f[v-a[i]]+a[i]);
                }
            }
            cout << m-f[V]-ans << endl;
        }
    
        return 0;
    }
    
    
    转载请保留原文链接及作者
    本文标题:
    文章作者: LepeCoder
    发布时间:
    原始链接:
  • 相关阅读:
    N的阶乘 51Nod
    hdu1176 免费馅饼(dp)~~~~~~~~~~~~~~~~~
    细胞
    红与黑
    迷宫
    【TFLSnoi李志帅】---sort
    【TFLSnoi李志帅】---全排列例题
    【TFLSnoi李志帅】---全排列和组合
    【TFLSnoi李志帅】---栈
    【TFLSnoi李志帅】---函数递归
  • 原文地址:https://www.cnblogs.com/lepeCoder/p/hdu-2546.html
Copyright © 2011-2022 走看看