zoukankan      html  css  js  c++  java
  • HDU 2546 饭卡(01背包)

    这道题是一道关于01背包的,需要注意的是,先排序把价钱最大的那道菜去出来不进行放入,然后在(m-5)块钱的余额下进行01背包的排序。

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define inf 0x3ffffffff
    int n,m;
    int a[1005];
    int dp[1005];
    int DP()
    {
        memset(dp,0,sizeof(dp));
        for(int i=0; i<n-1; i++)
        {
            for(int j=m-5; j>=a[i]; j--)
            {
                //printf("%d ",dp[j-a[i]]);
                dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
                //printf("%d ",dp[j]);
            }
            //printf("
    ");
        }
        int ma=0;
        for(int i=0; i<=m; i++)
            if(dp[i]>ma) ma=dp[i];
        return ma;
    }
    int main()
    {
        //freopen("test.txt","r",stdin);
        while(scanf("%d",&n),n)
        {
            for(int i=0; i<n; i++)
                scanf("%d",&a[i]);
            scanf("%d",&m);
            sort(a,a+n);
            if(m<5) printf("%d
    ",m);
            else{
                int ans=DP();
                printf("%d
    ",m-ans-a[n-1]);
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    PyQt5库结构
    PyQt5
    QObject
    os.listdir()
    os.getcwd()
    os.chdir()
    os.access()
    __name__
    php 学习笔记之关于时区的那点事
    php 学习笔记之搭建开发环境(mac版)
  • 原文地址:https://www.cnblogs.com/zzulipomelo/p/4883587.html
Copyright © 2011-2022 走看看