小背包
Time Limit: 1000 MS Memory Limit: 10240 K
Total Submit: 1220(237 users) Total Accepted: 307(208 users) Rating: Special Judge: No
Description
有一个容量为m(1<=m<=4000000)的背包,有n(1<=n<=16)个物品,每个物品有体积v(1<=v<=2012)和价值w(0<=2012),现在要你选择一些物品,使得背包所装物品的总价值最大。

Input
有多组测试数据,但是不会超过10组。

对于每组测试数据,第一行是两个整数m和n,表示背包容量的和物品个数。接下来有n行,每行有两个整数,表示一个物品的体积和价值。

输入到文件结束。

Output
对于每组测试数据,输出一行,包含一个整数,为背包能装下物品的最大价值。

Sample Input
10 3
6 9
5 5
5 5
3 2
1 2
2 1
Sample Output
10
3
过程都只是一个普通的小背包,注意坑点在最大容积,第一眼看,可能觉得一定会超时爆内存,结果再往后面看发现只有16个物品,再往后看,每个物品最大只有2012,也就是说总重不会超过16*2012,背包容积最大值远大于物品体积,此时,dp数组只用设到33000左右就好,但为防止m过大,毕竟是要这个数据带入进去遍历dp数组的,所以即使没装那么多,也会遍历数组遍历到爆,RE就不可避免了。于是多加个判定条件,当容积远远大于所有物品体积时,直接全部装进去就好了,不用再执行后面的算法。这样也是有道理的,毕竟你数组就是最大体积了,容积再大,也是都可以装进去的了,不仅省时还能避免数组越界

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[20][34000];///好坑啊,题目说了背包那么大,但是实际16个物品每个物品2012的体积,根本用不了那么大
struct box
{int cost;int value;
}num[20];
int main()
{int i,j,n,m;while(scanf("%d%d",&m,&n)!=EOF){int sum=0,sum2=0;memset(dp,0,sizeof(dp));for(i=1;i<=n;i++){scanf("%d%d",&num[i].cost,&num[i].value);sum=sum+num[i].cost;sum2=sum2+num[i].value;}if(sum<m)///注意自己输入的是m,即使合在一起的体积没那么大,容积还是会在遍历时用到m的数值,而发生数组越界,因此注意{printf("%d\n",sum2);///当输入的容积大于总体积时,可以直接输出所有的价值和,不用一个一个装上去了continue;}for(i=num[1].cost;i<=m;i++){dp[1][i]=num[1].value;}for(i=2;i<=n;i++){for(j=1;j<=m;j++){if(j>=num[i].cost){dp[i][j]=max(dp[i-1][j],dp[i-1][j-num[i].cost]+num[i].value);///记住啊,容积减掉当前遍历的那个物品的体积,个数也要减掉一个诶}elsedp[i][j]=dp[i-1][j];///是物品-1,不是容积-1,是如果装不了,那就继承上面那个物品的在此容积下的价值!!!}}
//        for(i=0;i<=n;i++)///动态规划表超美的
//        {//            for(j=0;j<=m;j++)
//            {//                printf(" %d",dp[i][j]);
//            }
//            printf("\n");
//        }printf("%d\n",dp[n][m]);}return 0;
}

hrbust 1558 小背包(简单01背包)水坑相关推荐

  1. HDU2602Bone Collector 简单0-1背包

    HDU2602Bone Collector 简单0-1背包 Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  2. 习题整理(简单01背包 可用查并集2022/4/24)

    习题整理 提示:之前的习题在习题集合 文章目录 习题整理 一.诱人的宝藏 1.思路 2.代码 二.晚宴 1.思路 2.代码 三.医师之路 1.思路 2.扩展知识 3.代码 总结 提示:以下是本篇文章正 ...

  3. hdu 1881(简单01背包)

    毕业bg Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  4. 简单01背包 POJ3211 Washing Clothes 多种衣服分别dp

    题目连接:http://poj.org/problem?id=3211 大意就是 一个人洗衣服,然后找他媳妇帮忙.有n种颜色的衣服,和m件衣服,每件衣服的颜色和洗出来的时间都会给出来.再洗的时候两个人 ...

  5. hdu1171 转化01背包,组合

    题意就是给你一些有价值的物品,你要把它分成尽量相同的两份. #include <iostream> #include <cstring> #include <algori ...

  6. 01背包总结+传授个人经验

    写在前面: 自从学了背包这个专题,感觉永远也写不完,之前写了三种类型的01背包,结果现在发现都是简单的01背包.后来又学了多重背包.完全背包,其中多重背包还可以进行二进制优化. 本文将对这几种常见的背 ...

  7. DP问题之01背包如此简单

    01背包问题 有 N 件物品和一个容量是 V 的背包.每件物品只能使用一次. 第 i 件物品的体积是 vi,价值是 wi. 求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大. ...

  8. hdu 2546 饭卡——一道简单的 01背包

    今天讲的是动态规划,学长们拉了13道题让我们做一下,一下午大概4小时,做了5道题(还是太弱了 摊手) 题意: 电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额.如果购买一个商品之前,卡上 ...

  9. 简单的01背包和完全背包

    2020.12.30开始学习AcWing算法<算法竞赛进阶指南>: 上传博客方便复习. 01背包(每种物品只能使用一次): //Wecccccccc //2020.12.31 #inclu ...

最新文章

  1. java数组是不是对象_java的数组是对象吗
  2. linux无法运行病毒,{转}为什么linux系统不容易中病毒?
  3. Angular.js 最强学习资源合集
  4. 大咖说中台 | 建设数据中台系列(五)——中台架构详解(下)
  5. Oracle Golden Gate 系列十二 -- GG 数据初始化装载二 基于SCN 的初始化 说明 与 示例...
  6. Kaldi语料的两种切分/组织方式及其处理
  7. matlab 图例自定义,matlab实现自定义曲线图以及图例
  8. linux五笔输入法制作_在linux下制作拼音五笔输入法
  9. 北京16个山水美景| 清明小长假走起吧!
  10. Eclipse:Build not configured correctly问题
  11. Gephi报错cannot load even default layout, using internally predefined configuration解决方法
  12. 教孩子学习乘法和除法,我算是绞尽脑汁了
  13. Java Ftp客户端
  14. VS2022配置OpenCV 4.3.0报错解决办法
  15. 2秒下一部4K电影 挥别蹭网下片时代
  16. Unable to load Maven meta-data from xxx com/github/chrisbanes/photoview/
  17. vue适配双端浮标(悬浮球)拖拽
  18. 产品体验报告——百词斩
  19. Python ChatOps库:Opsdroid和Errbot
  20. vue 前端实现对pdf添加批注

热门文章

  1. 压力、焦虑还是抑郁? 正确诊断再治疗
  2. Ktor2.0很多新特性,我们一年前就想到了,并已落实在项目中
  3. 手动安装torch和torchviosn教程
  4. 揭秘阿里VR电商购物
  5. Install cf v6
  6. pgsql实现json格式转换
  7. python字典嵌套字典构造_浅析python 字典嵌套
  8. mysql将查询结果作为临时表查询_mysql使用查询结果作为临时表
  9. DISPO与EKGRP 的关系(MRP控制者和采购组)
  10. 祛除装修异味的方法 总有一种适合你!