01背包

本文介绍了一个经典的背包问题求解算法,通过动态规划的方法实现。针对N件物品和一个容量为V的背包,每件物品有对应的费用和价值,目标是找到能够放入背包中的物品组合以使得总价值最大化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是noip的基本功。

题目:N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。


解答:# include "iostream"
# include "cstdio"
using namespace std;

int
    w[1000001],
    c[1000001];   

int
    f[1001];

int main() {
    
    int i,j,m,n;
    int sc;   

    //freopen("package.in","r",stdin);
    //freopen("package.out","w",stdout);
    cin>>m;
    cin>>n;

    sc = 0;
    for ( i=1; i<=n; i++ ) {
        cin>>w[i];
        sc += w[i];
        cin>>c[i];
    }//输入

    for (i=1; i<=n; i++) {//代价
        for ( j=w[i]; j<=m; j++ ) { //最大的价值
            if(f[j-w[i]]+c[i]>f[j]){
                f[j]=f[j-w[i]]+c[i];//看看这个是取还是不取,取最大值
            }
        }
    }

    printf("%d",f[m]);//输出
    
    return 0;
    
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值