每日一题00012背包问题-序

前言&背包问题的历史
背包问题(Knapsack problem)是一种组合优化的NP完全问题(NP完全问题,是世界七大数学难题之一。 NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。简单的写法是 NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P)。

背包问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。问题的名称来源于如何选择最合适的物品放置于给定背包中。

相似问题经常出现在商业、组合数学,计算复杂性理、密码学和应用数学等领域中。也可以将背包问题描述为决定性问题,即在总重量不超过W的前提下,总价值是否能达到V?它是在1978年由Merkle和Hellman提出的。

背包问题已经研究了一个多世纪,早期的作品可追溯到1897年   数学家托比亚斯·丹齐格(Tobias Dantzig,1884-1956)的早期作品  ,并指的是包装你最有价值或有用的物品而不会超载你的行李的常见问题。
————————————————
版权声明:本文为CSDN博主「热爱编程的林兮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_63951142/article/details/130222965

背包问题汇总:

01背包

/*日后*/

完全背包

代码:

//12月3日还不会。
#include <stdio.h>
int dp[1010]={0};  
int max(int a,int b){
  return a>b?a:b;
} //dp[j]表示所装物品的总体积为j时的总价值
int main() {
    int N,V;
    scanf("%d%d",&N,&V);
       int w[1000],v[1000];
       for(int i=0;i<N;i++){
         scanf("%d %d",w+i,v+i);
       }
    for(int i=0; i<N; i++) {
        for(int j=w[i]; j<=V; j++) {
         dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
        }
    }
  printf("%d\n",dp[V]);
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值