• HDOJ 5410 CRB and His Birthday DP背包



    先跑一遍01背包,再跑一遍多重背包


    CRB and His Birthday

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 327    Accepted Submission(s): 177


    Problem Description
    Today is CRB's birthday. His mom decided to buy many presents for her lovely son.
    She went to the nearest shop with M Won(currency unit).
    At the shop, there are N kinds of presents.
    It costs Wi Won to buy one present of i-th kind. (So it costs k × Wi Won to buy k of them.)
    But as the counter of the shop is her friend, the counter will give Ai × x + Bi candies if she buys x(x>0) presents of i-th kind.
    She wants to receive maximum candies. Your task is to help her.
    1 ≤ T ≤ 20
    1 ≤ M ≤ 2000
    1 ≤ N ≤ 1000
    0 ≤ Ai, Bi ≤ 2000
    1 ≤ Wi ≤ 2000
     

    Input
    There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases. For each test case:
    The first line contains two integers M and N.
    Then N lines follow, i-th line contains three space separated integers WiAi and Bi.
     

    Output
    For each test case, output the maximum candies she can gain.
     

    Sample Input
    1 100 2 10 2 1 20 1 1
     

    Sample Output
    21
    Hint
    CRB's mom buys 10 presents of first kind, and receives 2 × 10 + 1 = 21 candies.
     

    Author
    KUT(DPRK)
     

    Source
     



    /* ***********************************************
    Author        :CKboss
    Created Time  :2015年08月21日 星期五 13时29分32秒
    File Name     :HDOJ5410.cpp
    ************************************************ */
    
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <string>
    #include <cmath>
    #include <cstdlib>
    #include <vector>
    #include <queue>
    #include <set>
    #include <map>
    
    using namespace std;
    
    const int maxn=1100;
    
    int m,n;
    int w[maxn],A[maxn],B[maxn];
    int dp[maxn*2];
    
    int main()
    {
    	//freopen("in.txt","r",stdin);
    	//freopen("out.txt","w",stdout);
    
    	int T_T;
    	scanf("%d",&T_T);
    	while(T_T--)
    	{
    		scanf("%d%d",&m,&n);
    
    		for(int i=1;i<=n;i++) scanf("%d%d%d",w+i,A+i,B+i);
    
    		memset(dp,0,sizeof(dp));
    
    		for(int i=1;i<=n;i++)
    		{
    			for(int j=m;j>=w[i];j--)
    			{
    				dp[j]=max(dp[j],dp[j-w[i]]+A[i]+B[i]);
    			}
    		}
    
    		for(int i=1;i<=n;i++) 
    		{
    			for(int j=w[i];j<=m;j++) 
    			{
    				dp[j]=max(dp[j],dp[j-w[i]]+A[i]);
    			}
    		}
    
    		printf("%d
    ",dp[m]);
    	}
        
        return 0;
    }
    



  • 相关阅读:
    HTB-靶机-Charon
    第一篇Active Directory疑难解答概述(1)
    Outlook Web App 客户端超时设置
    【Troubleshooting Case】Exchange Server 组件状态应用排错?
    【Troubleshooting Case】Unable to delete Exchange database?
    Exchange Server 2007的即将生命周期,您的计划是?
    "the hypervisor is not running" 故障
    Exchange 2016 体系结构
    USB PE
    10 months then free? 10个月,然后自由
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7151135.html
Copyright © 2020-2023  润新知