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

     0-1背包问题

    i = 1,扫所有上限价钱只购买一件物品的最大消费(price[1])

    i = 2,更新一遍,此时是购买两件物品的最大消费(price[2])

    以此类推~有n件物品

    但是只进行到n-1,是因为最大的那件物品留至最后才减

    价值最高上限为m-5

     1 #include<iostream>
     2 #include<memory.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int price[1010];
     6 int f[1010];
     7 int main()
     8 {
     9     int n,m;
    10     while(cin>>n && n)
    11     {
    12         memset(price,0,sizeof(price));
    13         for(int j = 1; j <= n; j++)
    14             cin>>price[j];
    15         sort(price+1,price+n+1);
    16         int Max = price[n];
    17         cin>>m;
    18         if(m < 5)
    19         {
    20             cout<<m<<endl;
    21         }
    22         else
    23         {
    24             memset(f,0,sizeof(f));
    25             for(int i = 1; i <= n - 1; i++)
    26                 for(int j = m - 5; j >= price[i]; j--)
    27                     if(f[j] < f[j-price[i]] + price[i])//f[j]表示j元时,i件物品所需的最大值
    28                         f[j] = f[j-price[i]] + price[i];
    29             cout<<m-f[m-5]-Max<<endl;
    30         }
    31     }
    32     return 0;
    33 }
  • 相关阅读:
    获取deeplearning电子书
    iterm2 粘贴时有多余字符 0~ 1~
    linux mint使用中的问题解决记录
    column命令
    命令行中画图
    sphinx转pdf显示中文
    linux查看显卡
    python 3.6
    Mac笔记本中使用postgresql
    计算KS值的标准代码
  • 原文地址:https://www.cnblogs.com/imLPT/p/3883681.html
Copyright © 2011-2022 走看看