ppt 例题8 多重背包

#include <stdio.h>
#include <string.h>
int dp[60001];
void f(int maxv,int n,int c[ ],int v[ ])
                                              //最大可能价值、 物品种类、物品数量、物品价值
{   int i,j,k,t;
    memset(dp,0,sizeof(dp));
    dp[0] = 1;
    for ( i = 1; i <=n; i++) //物品种类                                                           // 物品种类  从1开始
        for (j = maxv; j>=0; j--)   //必须从背包容量向下循环                                               //j 从最大的 开始
            if (dp[j])
            {   t = j;                                                                      //  t 的 初值为 j
                for ( k = 1; k <= c[i]; k++)    //物品数量循环
                     dp[t=t+v[i]] = 1;                                                                             // t 也会变化
            }
}

int main()
{   int i,sum;
    int c[7],v[7];  //物品的数量与价值
    while (1)
    {   sum = 0;
        for (i = 1; i <= 6; i++) //输入6种物品的个数
        {   scanf("%d",&c[i]);   v[i]=i;  sum += c[i]*v[i];  }
        if (sum==0)  break;
        if (sum%2)  { printf("Can‘t\n");   continue;  }
        f(sum,6,c,v);     //调用模版函数f()
        if (dp[sum/2]==1) printf("Can\n");
        else printf("Can‘t\n");
    }
    return 0;
}

ppt 例题8 多重背包

时间: 2024-11-12 21:30:15

ppt 例题8 多重背包的相关文章

ppt 例题8 多重背包3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28                                                           ppt 例题8 多重背包3

ppt 例题8 多重背包2

#include <stdio.h>#include <string.h>int dp[60001];void f(int maxv,int n,int c[ ],int v[ ])//最大可能价值. 物品种类.物品数量.物品价值 {   int i,j,k,t;    memset(dp,0,sizeof(dp));    dp[0] = 1;    for ( i = 1; i <=n; i++) //物品种类        for (j = maxv; j>=0;

【动态规划】背包问题(一) 01背包 完全背包 多重背包

一.01背包 有N件物品和一个容量为V的背包.第i件物品的价格(即体积,下同)是w[i],价值是c[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 这是最基础的背包问题,总的来说就是:选还是不选,这是个问题<( ̄ˇ ̄)/ 相当于用f[i][j]表示前i个背包装入容量为v的背包中所可以获得的最大价值. 对于一个物品,只有两种情况 情况一: 第i件不放进去,这时所得价值为:f[i-1][v] 情况二: 第i件放进去,这时所得价值为:f[i-1][v-c[i]]+w

有关货币问题的动态规划题目--有关01背包,完全背包,多重背包

背包dp:参考背包九讲以及给出一些题目 01背包 (先枚举物品,再逆序枚举容量) 给定n件物品和一个容量为V的背包,每件物品的体积是w[i],价值是va[i](1<=i<=n),求在不超过背包的容量的情况下,怎么选择装这些物品使得得到的价值最大? 例如:有5件物品,体积分别是{2,2,6,5,4},价值分别是{6,3,5,4,6} 递归式:F(i,v)=max(F(i-1,v), F(i-1,v-w[i])+va[i]),其中F(i,v)表示把前i种物品恰放入背包容量为v时取得的最大价值 把这

多重背包——二进制转化法

Learn from God LZW,worship... 多重背包(MultiplePack): 有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 这种背包问题与完全背包问题相似.对于第i种物品,可以取0件,1件,2件,……,n[i]件.可以把这种问题转化为01背包问题,对于取1,2,……,n[i]件各立一个物品,这样就可以用01背包的方法轻松解决.但是,当遇上强数据

背包之01背包、完全背包、多重背包详解

首先说下动态规划,动态规划这东西就和递归一样,只能找局部关系,若想全部列出来,是很难的,比如汉诺塔.你可以说先把除最后一层的其他所有层都移动到2,再把最后一层移动到3,最后再把其余的从2移动到3,这是一个直观的关系,但是想列举出来是很难的,也许当层数n=3时还可以模拟下,再大一些就不可能了,所以,诸如递归,动态规划之类的,不能细想,只能找局部关系. 1.汉诺塔图片 (引至杭电课件:DP最关键的就是状态,在DP时用到的数组时,也就是存储的每个状态的最优值,也就是记忆化搜索) 要了解背包,首先得清楚

多重背包二进制优化

以这次水比赛为例题  [luogu]对于多重背包和完全背包的混合问题,可以让完全背包的件数等于一个很大的数(比如99999),然后二进制转化一下,再按照01背包解决就好了 #include<cstdio> #include<iostream> #define N 1000005 using namespace std; int n,m; int c,t,p,cnt; int val[N],size[N]; int f[1005]; int main(){ scanf("%

背包问题入门(单调队列优化多重背包

背包问题 写这篇文章主要是为了帮帮新人吧,dalao勿喷.qwq 一般的背包问题问法 每种物品都有一个价值w和体积c.//这个就是下面的变量名,请看清再往下看. 你现在有一个背包容积为V,你想用一些物品装背包使得物品总价值最大. 01背包 多种物品,每种物品只有一个.求能获得的最大总价值. 我们考虑是否选择第i件物品时,是需要考虑前i-1件物品对答案的贡献的. 分析 如果我们不选择第i件物品,那我们就相当于是用i-1件物品,填充了体积为v的背包所得到的最优解. 而我们选择第i件物品的时候,我们要

[hdu5445 Food Problem]多重背包

题意:一堆食物,有价值.空间.数量三种属性,一些卡车,有空间,价格,数量三种属性.求最少的钱(不超过50000)买卡车装下价值大于等于给定价值的食物,食物可以拆开来放. 思路:这题的关键是给定的条件:食物可以拆开来放.这个条件使得卡车和食物可以分开考虑,然后通过空间这个属性联系在一起.做两遍多重背包即可. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35