#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
const int qq=+;
int v[qq],w[qq],dp[qq];
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n,m;
scanf("%d %d",&n,&m);
memset(dp,,sizeof(dp));
memset(v,,sizeof(v));
memset(w,,sizeof(w));
int count=;
for(int i=;i<m;++i){
int value,weight,tot;
scanf("%d %d %d",&value,&weight,&tot);
int t=;
while(tot>=t){
v[count]=t*value;
w[count++]=t*weight;
tot-=t;
t<<=;
}
if(tot){
v[count]=tot*value;
w[count++]=tot*weight;
}
}
for(int i=;i<count;++i)
for(int j=n;j>=v[i];--j) //j必须从n开始dp,如果循序开始dp的话v[i]会被取多次
dp[j]=max(dp[j],dp[j-v[i]]+w[i]); //也就是说达不到01背包要求的v[i]只有取和不取两种状态、
printf("%d\n",dp[n]);
}
}

算法时间复杂度O(V*∑log n[i])

总算是理解了为什么要逆序dp

#include <stdio.h>
.#include <string.h>
.#include <algorithm>
.using namespace std;
.int main()
.{
. int ncase,p[],w[],c[],dp[];
. scanf("%d",&ncase);
. while(ncase--)
. {
. int n,m,count=;
. scanf("%d %d",&n,&m);
. for(int i=;i<m;i++)
. scanf("%d %d %d",&p[i],&w[i],&c[i]);
. memset(dp,,sizeof(dp));
. int temp=;
. for(int i=;i<m;i++)
. {
. for(int j=n;j>=p[i];j--)//唉在这里又错了几次 要倒着来。
. {
. for(int k=;k<=c[i];k++)
. {
. if(j<k*p[i]) break;
. dp[j]=max(dp[j-k*p[i]]+k*w[i],dp[j]);
. if(dp[j]>temp)
. temp=dp[j];
. }
. }
. }
. printf("%d\n",temp);
. }
. return ;
.}

上述代码是借鉴别人的、   也是多重背包最原始的解法

时间复杂度O(V*∑n[i])

HDU 2191多重背包问题、的更多相关文章

  1. HDU 1114 完全背包 HDU 2191 多重背包

    HDU 1114 Piggy-Bank 完全背包问题. 想想我们01背包是逆序遍历是为了保证什么? 保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗 means ...

  2. hdu 2191 (多重背包+二进制优化)

    Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...

  3. hdu 2191 多重背包

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  4. hdu 2191多重背包

    悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  5. 【HDU】2191 多重背包问题

    原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...

  6. hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活

    http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

  7. hdu 2191 (多重背包二进制优化)

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...

  8. HDU 1059 多重背包问题

    问题大意: 有价值1-6的六种物品,分别规定其数目,问是否存在一种方法能使这些物品不拆分就能平均分给两个人 #include <cstdio> #include <cstring&g ...

  9. hdu 2191 【背包问题】

    题目 请输出能够购买大米的最多重量,注意是重量不是价值. 把每一种物品拧出来,用01背包解决. #include <cstdio> #include <iostream> #i ...

随机推荐

  1. Django项目:CRM(客户关系管理系统)--08--03PerfectCRM创建基本数据03

    如果感觉本章博客对您有帮助,请尽情打赏吧!

  2. string型的“600.000”如何转换为int型

    string型的“600.000”怎么转换为int型?为什么我用int.parse不能转换? ------解决方案--------------------int.Parse("600.000 ...

  3. java jsp j2ee

    1. JavaScript用于编写嵌入在网页文档中的程序,它由浏览器负责解释和执行,可以在网页上产生动态的显示效果和实现与用户交互的功能,譬如,让一串文字跟着鼠标移动,让一个图标在网页漂浮移动,验证用 ...

  4. 2018-5-22-SublimeText-粘贴图片保存到本地

    title author date CreateTime categories SublimeText 粘贴图片保存到本地 lindexi 2018-05-22 15:15:26 +0800 2018 ...

  5. 【水滴石穿】react-native-ble-demo

    项目的话,是想打开蓝牙,然后连接设备 点击已经连接的设备,我们会看到一些设备 不过我这边在开启蓝牙的时候报错了 先放作者的项目地址: https://github.com/hezhii/react-n ...

  6. 跨域知识(二)——JSONP

    JSONP是服务器与客户端跨源通信的常用方法.最大特点就是简单适用,老式浏览器全部支持,服务器改造非常小. 它的基本思想是,网页通过添加一个<script>元素,向服务器请求JSON数据, ...

  7. laravel 文件

    用laravel处理上传的文件 1.获取上传的文件 $file=$request->file('file');2.获取上传文件的文件名(带后缀,如abc.png) $filename=$file ...

  8. js 全角与半角互转

    ///全角空格为12288,半角空格为32    ///其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248    //半角转换为全角函数    function ...

  9. docker search

    命令:docker search [root@iZ943kh74qgZ ~]# docker search --help Usage: docker search [OPTIONS] TERM Sea ...

  10. Flask_Migrate数据库迁移

    migrate数据库迁移 有models,没有迁移仓库.本地新建数据库:首次创建迁移仓库.迁移脚本:执行迁移脚本生成数据库表: python manage.py db init python mana ...