• 饭卡


    https://vjudge.net/problem/18374/origin

    之前一直理解错了 是先买最小的后 最后减最大的 这样血赚【大佬粗话】
     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<cmath>
     5 using namespace std;
     6 const int maxn =2005;
     7 int m,n;
     8 int main()
     9 {
    10      while(~scanf("%d",&n))
    11      {
    12          if(n==0) break;
    13          int w[maxn];
    14          int f[maxn]={0},mx;
    15          for(int i=1;i<=n;i++){
    16             scanf("%d",&w[i]);
    17          }
    18          sort(w+1,w+1+n);
    19          mx=w[n];
    20          scanf("%d",&m);
    21         if(m<5) printf("%d
    ",m);
    22         else
    23         {
    24             m-=5; //用5元买最贵的==金额在买完其他的后无限接近于5元时
    25             for(int i=1;i<n;i++) //用n-1个数,m-5来01背包
    26             for(int k=m;k>=w[i];k--)
    27             f[k]=max(f[k],f[k-w[i]]+w[i]);
    28             printf("%d
    ",m-f[m]+5-mx);
    29         }
    30         printf("
    ");
    31      }
    32   return 0;
    33 }
    hdu 2546
  • 相关阅读:
    支付宝沙箱环境应用
    七牛云视频托管
    腾讯云短息验证码接口
    git远程连接(码云)
    git
    字间距
    html文本保留空格
    mysql重启导致AUTO_INCREMENT从1开始
    js保留两位小数
    vue中watch的基本用法
  • 原文地址:https://www.cnblogs.com/XXrll/p/10108980.html
Copyright © 2020-2023  润新知