01背包问题学习练习

这是我写的第一个用动态规划写的01背包,点个赞。呵呵,题目描述就不说了,你懂的。。。

直接上代码。。。。

#include<stdio.h>
struct item
{
    int value;//物品的质量
    int weigh;//物品的重量
};
int main()
{
    int item_N;//物品种类
    int W_all;//总质量最大要求
    printf("物品种类  最大质量\n");
    scanf("%d%d",&item_N,&W_all);
    int i;
    struct item G[20];
    for(i=0;i<=item_N;i++){
        G[i].value=0;
        G[i].weigh=0;
    };
    printf("G[i].value  G[i].weigh\n");
    for(i=1;i<=item_N;i++)
        scanf("%d%d",&G[i].value,&G[i].weigh);
    int F[200]={0};//F[i]表示最大质量为i时的最大价值;
    int w;
    for(i=1;i<=item_N;i++){
        for(w=W_all;w>=G[i].weigh;w--){
        //F[w]=max{F[w],F[w-G[i].weigh]+G[i].value}
            if(F[w]<F[w-G[i].weigh]+G[i].value)
                F[w]=F[w-G[i].weigh]+G[i].value;
        }
        int j;
        for(j=0;j<W_all;j++)
            printf("F[%d]=%d ",j,F[j]);
        printf("\n");
    }
    printf("F[W_all]=%d\n",F[W_all]);
    return 0;
}

测试数据:

时间: 2024-09-30 05:31:12

01背包问题学习练习的相关文章

算法学习 - 01背包问题(动态规划C++)

动态规划 01背包 问题描述 求解思路 代码实现 放入哪些物品 代码 动态规划 我在上一篇博客里已经讲了一点动态规划了,传送门:算法学习 - 动态规划(DP问题)(C++) 这里说一下,遇到动态规划应该如何去想,才能找到解决办法. 最主要的其实是要找状态转移的方程,例如上一篇博客里面,找的就是当前两条生产线的第i个station的最短时间和上一时刻的时间关系. minTime(station[1][i]) = minTime(station[1][i-1] + time[i], station[

01背包问题的学习(来源:背包九讲)

问题: 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 思路: 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放.用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}.这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的.所以有必要将它详细解释一下:"

数据结构学习笔记(01背包问题/图问题)

01背包问题:在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2--Wn,与之相对应的价值为P1,P2--Pn.求如何安排能带走最多价值的物品? 动态规划解决背包问题: 设f(i,W)表示,从前i件物品中挑选一些,放进一个空间为W的背包中能获得的最大总价值. 那么如果第i件物品也在最优解中,那么f(i,W)=f(i-1,W-Wi)+Pi,因为从最优解中吧i去掉,前面选中的物品肯定能使一个空间为W-Wi的背包价值最大化,不然它们也不会出现在最优解中. 而如果第i件物品不在最优解中

01背包问题的动态规划算法

01背包问题我最初学会的解法是回溯法,第一反应并不是用动态规划算法去解答.原因是学习动态规划算法的时候,矩阵连乘.最长公共子串等问题很容易将问题离散化成规模不同的子问题,比较好理解,而对于01背包问题则不容易想到将背包容量离散化抽象出子问题,从情感上先入为主也误以为动态规划算法不是解决01背包问题的好方法,实际上并不是这样的.另外,动态规划算法不对子问题进行重复计算,但是要自底向上将所有子问题都计算一遍,直到计算出最终问题的结果也就是我们要的答案,有点像爬山的感觉. 问题描述:给定n种物品和一背

01背包问题

01背包问题详解 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使价值总和最大. 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]} 这个方程非常重要,基本上所有跟背包相关的问题的方程都是由它衍生出来的.所以有必

《算法导论》读书笔记之第16章 0-1背包问题—动态规划求解

原文:http://www.cnblogs.com/Anker/archive/2013/05/04/3059070.html 1.前言 前段时间忙着搞毕业论文,看书效率不高,导致博客一个多月没有更新了.前段时间真是有些堕落啊,混日子的感觉,很少不爽.今天开始继续看算法导论.今天继续学习动态规划和贪心算法.首先简单的介绍一下动态规划与贪心算法的各自特点及其区别.然后针对0-1背包问题进行讨论.最后给出一个简单的测试例子,联系动态规划实现0-1背包问题. 2.动态规划与贪心算法 关于动态规划的总结

Bone Collector------HDOJ杭电2602(纯01背包问题!!!!!!详解!)

Problem Description Many years ago , in Teddy's hometown there was a man who was called "Bone Collector". This man like to collect varies of bones , such as dog's , cow's , also he went to the grave - The bone collector had a big bag with a volu

找换硬币问题 与 0-1背包问题区别

之所以再写一篇Blog,是因为现实中很多问题都可以转化成“找换硬币”问题 和 “0-1”背包问题.因此,需要细细理解. 其次,在“参考资料”中汇总关于 贪心算法与动态规划的一些Blog及学习资料. 区别: 其实最大的区别就是:找换硬币问题中的 某类硬币 是可以多次选择的.而对于0-1背包问题,某物品要么选,要么不选,选了之后,它就“没了”.当然,有0-1背包问题的变形--完全背包问题--某(某类)物品有多个,可重复选. 第二,就是选择的权衡.0-1背包问题,还有个价值属性,在选择的时候,是考虑价

动态规划的详细解析(01背包问题)

                                  算法分析之动态规划详解 先举个例子01背包问题具体例子:假设现有容量15kg的背包,另外有4个物品,分别为a1,a2,a3, a4.物品a1重量为3kg,价值为4:物品a2重量为4kg,价值为5:物品a3重量为5kg,价值为6, a4重6千克,价值为7.将哪些物品放入背包可使得背包中的总价值最大? 对于这样的问题,如果如上述所涉及的数据比较少的时候,我们通过列举就能算出来,例如,上边的例子的答案是:将a4和a3与a2放入背包中,