1013. 无限背包

Description

你现在有一个体积为V的大袋子,有N种物品,假设每种物品的数量有无限多个,而且第i种物品的体积是c[i],价值是w[i],请选择一些物品放入袋中,使袋中物品的价值总和最大。

注意每种物品的数量是无限多的;对于放入袋中的同种物品数量没有限制。

Input Format

第一行包含两个正整数V和N,分别代表袋子的体积和物品的种类数。

以下N行分别由2个正整数组成,代表每种物品的体积和价值。

V10000,N1000

保证操作可在C++ int范围内完成。

Output Format

输出一个整数,表示最大的价值总和

Sample Input

5 3
2 3
3 2
4 1

Sample Output

6






#include<iostream>
#include<algorithm>
using namespace std;

typedef struct item{
    int c;
    int w;
    double p;
}item;

bool com(item a,item b){
    return a.p>b.p;
}

int main(){
    int v,n;
    item a[1001];
    cin>>v>>n;
    for(int i=0;i<n;i++){
        cin>>a[i].c>>a[i].w;
        a[i].p=a[i].w/double(a[i].c);
    }
    sort(a,a+n,com);
    int sum=0,j,k;
    for(int i=0;i<n;i++){
        j=v/a[i].c;
        k=v%a[i].c;
        sum+=j*a[i].w;
        v=k;
    }
    cout<<sum;
    return 0;
}

 

转载于:https://www.cnblogs.com/bernieloveslife/p/7778906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值