zoukankan      html  css  js  c++  java
  • HDU2546 饭卡(背包)

    开始写成01背包的形式,求m元可买物品价值的最大值

    dp[j] = max(dp[j], dp[j - pri[i]] + pri[i])

    结果为m - dp[m] 

    但后来发现是有问题的, 比如这组过不去

    5
    15 14 13 13 42
    60

    正解应该m-5 >= 0时买尽量多的物品,然后剩下的钱买价值最大的物品。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<string>
     6 #include<algorithm>
     7 #include<map>
     8 #include<queue>
     9 #include<vector>
    10 #include<cmath>
    11 using namespace std;
    12 typedef long long LL;
    13 const int N = 10008, INF = 0x3F3F3F3F;
    14 #define MS(a, num) memset(a, num, sizeof(a))
    15 int pri[N];
    16 int num[5000];
    17 int main(){
    18     freopen("2546.txt""r", stdin);
    19     int n, m;
    20     //int *dp = num + 1000;
    21     while(~scanf("%d",  &n ) && n){
    22         MS(num, 0);
    23         for(int i = 0 ;i < n; i++){
    24             scanf("%d", &pri[i]);
    25         }
    26         scanf("%d", &m);
    27         sort(pri, pri + n);
    28         if(m < 5){
    29             cout<<m<<' ';
    30             continue;
    31         }
    32         m -= 5;
    33         for(int i= 0; i < n - 1; i++){
    34             for(int j = m; j >= pri[i]; j--){
    35                 num[j] = max(num[j], num[j - pri[i]] + pri[i]);
    36             }
    37         }
    38         printf("%d ", m + 5 - pri[n - 1] - num[m]);
    39     }
    40     return 0;

    41 } 

  • 相关阅读:
    C# 动态加载卸载 DLL
    C# 判断文件编码
    win10 uwp 如何拖动一个TextBlock的文字到另一个TextBlock
    C# TextBlock 上标
    PHP curl_getinfo函数
    PHP curl_file_create函数
    PHP curl_errno函数
    PHP curl_error函数
    PHP curl_escape函数
    PostgreSQL Schema
  • 原文地址:https://www.cnblogs.com/IMGavin/p/5639712.html
Copyright © 2011-2022 走看看