HDU 2191多重背包问题、
#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多重背包问题、的更多相关文章
- HDU 1114 完全背包 HDU 2191 多重背包
HDU 1114 Piggy-Bank 完全背包问题. 想想我们01背包是逆序遍历是为了保证什么? 保证每件物品只有两种状态,取或者不取.那么正序遍历呢? 这不就正好满足完全背包的条件了吗 means ...
- hdu 2191 (多重背包+二进制优化)
Problem Description 急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金n元,而市场有m种大米,每种大米都是袋装产品, ...
- hdu 2191 多重背包
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- hdu 2191多重背包
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav ...
- 【HDU】2191 多重背包问题
原题目:悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 [算法]多重背包(有限背包) 动态规划 [题解]http://blog.csdn.net/acdreamers/article/detail ...
- hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- hdu 2191 (多重背包二进制优化)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=2191 实现代码: #include<bits/stdc++.h> using namespac ...
- HDU 1059 多重背包问题
问题大意: 有价值1-6的六种物品,分别规定其数目,问是否存在一种方法能使这些物品不拆分就能平均分给两个人 #include <cstdio> #include <cstring&g ...
- hdu 2191 【背包问题】
题目 请输出能够购买大米的最多重量,注意是重量不是价值. 把每一种物品拧出来,用01背包解决. #include <cstdio> #include <iostream> #i ...
随机推荐
- jquery 调用asp.net后台代码
1.需要引用对应的命名空间 System.Web.Services 2.后台方法: 必须是static 约束 必须添加[WebMethod()] 属性 示例: <script type=&q ...
- HTML文档与盒子模型
关于HTML 百度百科里是这么说的:超文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. 为什么叫用于“描述”网页文档的“标记”语言呢? ...
- 当node升级后导致webpack打包出错,node-saas出问题的解决办法
报错信息如下: ERROR in ./node_modules/_extract-text-webpack-plugin@3.0.2@extract-text-webpack-plugin/dist/ ...
- 【心有猛虎】react-lesson
这个项目标识:构建一套适合 React.ES6 开发的脚手架 项目地址为:https://github.com/ZengTianShengZ/react-lesson 运行的是第一课,基本上可以当作是 ...
- 阿里云王广芳:5G时代,我们需要怎样的边缘计算?
7月24日阿里云峰会开发者大会的IT基础设施云化专场中,阿里云边缘计算高级技术专家王广芳进行了边缘节点服务重大升级发布,同时与现场观众一同探讨了5G时代边缘计算的思考与技术实践. 5G时代,我们需要怎 ...
- KNN最近邻算法
算法概述 K最近邻(K-Nearest Neighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位.它是一个理论上比较成熟的方法.既是最简单的机器学习算法之一,也 ...
- 深入浅出Cocoa 之动态创建类【转】
在前文<深入浅出Cocoa之类与对象>一文中,我已经详细介绍了ObjC中的 Class 与 Object 的概念,今天我们来如何在运行 时动态创建类.下面这个函数就是应用前面讲到的Clas ...
- 2019-8-31-dotnet-方法名-To-和-As-有什么不同
title author date CreateTime categories dotnet 方法名 To 和 As 有什么不同 lindexi 2019-08-31 16:55:58 +0800 2 ...
- Contacts源码分析(一、概述)
代码版本: Contact code version: 4.4.2 一 打开Log开关:如if (Log.isLoggable(Constants.PERFORMANCE_TAG, Log.DEBUG ...
- nodeJs学习-09 模板引擎 jade、ejs
模板引擎: jade -破坏式.侵入式,强依赖:用了之后不能随便用别的引擎 ejs - 温和.非侵入时.弱依赖 jade使用 const jade = require('jade'); var str ...