zoukankan      html  css  js  c++  java
  • 算法设计与分析 3.4 小鲨鱼

    ★题目描述

    本期活动中,共有N件商品参与促销,你身上带了M块钱。

    这N种物品每种物品有价格Ci和原价Vi,以及限购Ki件。

    你想知道你最多能够买走原价总和多少的商品。

    ★输入格式

    第一行包括两个正整数N, M,表示共有N件商品,你有M块钱。

    接下来的N行,每i行包括三个自然数Ci,Vi,Ki。表示第i件商品的价格、原价和限购数量。

    ★输出格式

    输出仅包括一个正整数,表示你能买走的最大原价总和。

    ★样例输入

    2 8
    2 100 4
    4 100 2
    

    ★样例输出

    400
    

    ★提示

    1<=N<=200,1<=M<=3000,
    0<=Ci<=20,1<=Vi<=200,1<=Ki<=1000000

    /*
    多重背包问题
    但是由于时间的限制,在遍历商品数量时要用二进制的思想 
    */ 
    #include<bits/stdc++.h>
    using namespace std;
    int N,M;
    int Ci,Vi,Ki;
    int F[3001];
    
    int main(){
    	cin>>N>>M;
    	
    	memset(F, 0, sizeof(F));
    	for(int i=0; i<N; ++i){
    		scanf("%d%d%d",&Ci,&Vi,&Ki);
    		for(int k=1; k<=Ki; Ki-=k, k=min(k*2, Ki)){  
    			for(int v=M; v>=Ci; --v){
    				if(v>=k*Ci) F[v] = max(F[v], F[v-k*Ci]+k*Vi);
    			}
    			if(k==Ki) break;
    		}
    	}
    	
    	cout<<F[M]<<endl;
    	return 0;
    } 
    
  • 相关阅读:
    numpy通用函数
    机器学习之随机森林
    机器学习之支持向量机
    机器学习之逻辑回归
    机器学习之决策树
    机器学*之K*邻
    机器学习之线性回归
    模型之各个指标
    模型之信息熵
    模型之决策树
  • 原文地址:https://www.cnblogs.com/yejifeng/p/12060571.html
Copyright © 2011-2022 走看看