背包问题

问题描述

一个旅行者有一个最多能用M公斤的背包,现在有N件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为V1, V2,..., Vn. 若每种物品只有一件求旅行者能获得最大总价值。 输入格式: M,N W1,V1 W2,V2 ...... 输出格式: X

动态规划解法

1、定义二维数组dp[n+1][m+1] (数组行和列要大于n+1和m+1)。其中n表示物品数目,m表示当前重量上限。那么dp[2][3]表示在重量3的限制下,拿两个物品能得到最大的重量。

注:为便于理解从1开始

2、初始化二维数组。为了减少时间复杂度,我们只需要初始化dp数组的第一行和第一列(dp[0][0]可以忽略,不会遍历它)。

 for (int i = 1; i < m + 1; i++)  //因为是从1开始{dp[0][i] = 0;}for (int i = 1; i < n + 1; i++){dp[i][0] = 0;}

原因是遍历dp的方向为从左到右,从上到下。故最大值为右下角

3、不断记录在不同的n和m的情况。

 for (int i = 1; i < n + 1; i++){for (int j = 1; j < m + 1; j++){if (a[i] <= j && dp[i - 1][j - a[i]] + a[i] > dp[i-1][j]){dp[i][j] = dp[i - 1][j - a[i]] + a[i];   }else{dp[i][j] = dp[i - 1][j];}}

ccf csp何以包邮?

题目描述

新学期伊始,适逢顿顿书城有购书满 x 元包邮的活动,小 P 同学欣然前往准备买些参考书。 一番浏览后,小 P 初步筛选出 n 本书加入购物车中,其中第 i 本(1≤i≤n)的价格为 ai 元。 考虑到预算有限,在最终付款前小 P 决定再从购物车中删去几本书(也可以不删),使得剩余图书的价格总和 m 在满足包邮条件(m≥x)的前提下最小。

试帮助小 P 计算,最终选购哪些书可以在凑够 x 元包邮的前提下花费最小?

输入格式

从标准输入读入数据。

输入的第一行包含空格分隔的两个正整数 n 和 x,分别表示购物车中图书数量和包邮条件。

接下来输入 n 行,其中第 i 行(1≤i≤n)仅包含一个正整数 ai,表示购物车中第 i 本书的价格。输入数据保证 n 本书的价格总和不小于 x。

输出格式

输出到标准输出。

仅输出一个正整数,表示在满足包邮条件下的最小花费。

样例1输入

 4 10020906060

样例1输出

 110

思路:由于该题没有固定的背包上限(求一定范围最大问题),而只有一个包邮条件(求一定范围最小)。故我的思路是用一个min来作为‘背包上限’,min一开始是全部属的价格之和,当dp[i][j]大于x以及小于min时,改变min值,最后min是满足包邮条件下的最小花费。(只有95分)

 # include<stdio.h># include<malloc.h>​int main(){int n, x, tmp=0, min =0, sum=0, j=0;scanf("%d %d", &n, &x);int* a = (int*)malloc(sizeof(int) * (n + 1));for (int i = 1; i < n+1; i++){scanf("%d", &a[i]);sum += a[i];}int** dp = (int**)malloc(sizeof(int*) * (n+1));for (int i = 0; i < n+1; i++){dp[i] = (int*)malloc(sizeof(int) * (sum+1));}//初始化dp数组for (int i = 1; i < sum + 1; i++){dp[0][i] = 0;}for (int i = 1; i < n + 1; i++){dp[i][0] = 0;}min = sum; for (int i = 1; i < n + 1; i++){for (int j = 1; j < min + 1; j++){if (a[i] <= j && dp[i - 1][j - a[i]] + a[i] > dp[i-1][j]){dp[i][j] = dp[i - 1][j - a[i]] + a[i];  if (dp[i][j] >= x && dp[i][j] < min){min = dp[i][j];   //在dp[i][j]大于x以及小于min时,改变min值}}else{dp[i][j] = dp[i - 1][j];}}}printf("%d", min);​return 0;}

ccf csp何以包邮?背包问题思路相关推荐

  1. CCF-CSP真题《202209-2 何以包邮?》思路+python满分题解

    想查看其他题的真题及题解的同学可以前往查看:CCF-CSP真题附题解大全 试题编号: 202209-2 试题名称: 何以包邮? 时间限制: 1.0s 内存限制: 512.0MB 问题描述: 题目描述 ...

  2. 2022年9月CSP认证题解 如此编码(k进制),何以包邮?(背包问题),吉祥物投票(珂朵莉树、懒标记、并查集)

    T1 如此编码 思路 由公式 和前缀乘积定义 得m=b1+a1×b2+⋅⋅⋅+a1×a2×⋅⋅⋅×an−1×bnm=b_1+a_1\times b_2+···+a_1\times a_2\times· ...

  3. 何以包邮?(动态规划:0-1背包问题)

    题目描述: 新学期伊始,适逢顿顿书城有购书满  x 元包邮的活动,小 P 同学欣然前往准备买些参考书. 一番浏览后,小 P 初步筛选出 n 本书加入购物车中,其中第 i 本(1≤ i ≤ n)的价格为 ...

  4. CCF CSP 201812-2 小明放学 解题思路及经验总结

    更新:多谢weixin_44714465同学指出我的错误[详见49-52行代码,已改正!].CCF CSP的OJ居然没有把这个错误检测出来,不过为了追求严谨,我们还是应该及时改正! 题目描述 试题编号 ...

  5. 【寒假每日一题】AcWing 4700. 何以包邮?

    目录 一.题目 1.原题链接 2.题目描述 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.知识风暴 0-1背包问题 一.题目 1.原题链接 4700. 何以包邮? - AcWing题库 ...

  6. 4700. 何以包邮?

    Powered by:NEFU AB-IN Link 文章目录 4700. 何以包邮? 题意 思路 代码 4700. 何以包邮? 题意 新学期伊始,适逢顿顿书城有购书满 x 元包邮的活动,小 P 同学 ...

  7. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  8. 以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系

    原文链接:以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系 发布单位:学会      发布时间:2017-01-20 16:16 作者:陆建峰    余立功 摘要:为提升计算机专业类学生 ...

  9. ccf csp寻宝!大冒险!(C语言)

    ccf csp寻宝!大冒险! 题目背景 暑假要到了.可惜由于种种原因,小 P 原本的出游计划取消.失望的小 P 只能留在西西艾弗岛上度过一个略显单调的假期--直到-- 某天,小 P 获得了一张神秘的藏 ...

最新文章

  1. 【中文】Joomla1.7扩展介绍之JoomSEF Free (搜索引擎友好)
  2. 总线协议之I2C总线时序
  3. php 从放弃到坚持放弃,从放弃到坚持作文
  4. 机器学习算法总结--SVM
  5. UVa-10820 Send a Table 欧拉函数
  6. 因子分析——matlab
  7. java实心菱形_java打印出实心菱形与空心菱形
  8. python字符串转义表
  9. 遗传算法解决TSP问题MATLAB实现(详细)
  10. Qt制作年会抽奖一界面
  11. 单片机c语言三角波采样点,单片机课程设计---信号发生器.doc
  12. 机器学习算法——GBDT
  13. WebService框架简介
  14. JeecgBoot新增一个module
  15. 苹果电容笔和apple pencil区别是什么?值得入手的电容笔品牌排行榜
  16. 电机学他励直流发电机matlab,华南理工电机学随堂练习答案完整版
  17. 扫描某网段存活主机(如何判定是否存活,去发送arp报文,如果有回应,表示存活)
  18. 【09CWOW总结】看你妹之《网瘾战争》
  19. SQL(面试实战01)
  20. 设计模式之简单工厂模式(C#版)

热门文章

  1. Oracle数据库操作基本語法
  2. openfire html5,XMPP,Smack,Openfire 异常、问题总结
  3. 8086汇编语言:标志寄存器的各个标志位的详细介绍
  4. 有时间我就要写点书评
  5. php show.bs.popover,POP提示 (Popover)
  6. ntu课程笔记:MDA(Mechanics, Dynamics and Aesthetic)
  7. RabbitMQ集群之federation联合插件的使用
  8. joinquant RSI策略邮件提醒 python发送邮件
  9. Ubuntu-内核安装及版本切换
  10. Discuz论坛标题和底部去掉版权信息 - Powered by Discuz!