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;
    }
    

      

  • 相关阅读:
    html5 to jsp
    java通过springMail发送邮件
    solr配置-Solrconfig.xml
    solr配置-Schema.xml
    solr连接数据库导入数据
    log4j 1.2 配置总结
    1-12 ARP协议
    1-11 ICMP协议
    1-10 网际层
    1-9 TCP/IP参考模型
  • 原文地址:https://www.cnblogs.com/zzulipomelo/p/4883587.html
Copyright © 2011-2022 走看看