总结:

        此题是背包问题的变形,物品的价值和重量有所改变,背包的容量限制有所改变,但核心动态规划求法没有改变。只需要在背包问题的解法上根据题意对物品表示,答案输出进行改变即可。

背包算法:http://t.csdn.cn/xxDIx

一、题目要求

题目描述

新学期伊始,适逢顿顿书城有购书满 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 100
20
90
60
60

样例1输出

110

子任务

70% 的测试数据满足:n≤15;

全部的测试数据满足:n≤30,每本书的价格 ai≤104 且 x≤a1+a2+⋯+an。

提示

对于 70% 的测试数据,直接枚举所有可能的情况即可。

二、我的解法(70)

#include<iostream>
#include<algorithm>
using namespace std;int price[30];int main(){int n,m;cin>>n>>m;for(int i=0;i<n;i++){cin>>price[i];}int min=1e9;for(int i=0;i<1<<n;i++){int sum=0;for(int j=0;j<n;j++){if(i>>j&1){sum+=price[j];}}if(sum>=m&&sum<min) min=sum;}cout<<min;return 0;
}

分析:用二进制数枚举进行暴力求解,求法简单,但是对于30%的样例超时了。

三、满分解法

#include<iostream>
#include<algorithm>using namespace std;const int N=1e7;
int p[35];
int f[N];int main(){int n,m,sum=0;cin>>n>>m;for(int i=1;i<=n;i++){//从1开始cin>>p[i];sum+=p[i];}for(int i=1;i<=n;i++){//一维01背包for(int j=sum;j>=p[i];j--){f[j]=max(f[j],f[j-p[i]]+p[i]);}}for(int i=m;i<=sum;i++){//找最小价值if(f[i]>=m){cout<<f[i];break;}}return 0;
}

  分析:

1.不是典型物品:这道题的物品只有价值,背包也没有容量限制,只有价值限制。其实就是v[]和w[]相等,既做了价值又做了容量。

2.没有给出具体容量限制:注意dp求解时 f[ ]存储了从1-n个物品,从1-m个容量的多种情况的最大价值,常规问题的答案是最后一个状态,这道题只需要从最低限度开始遍历,找到最近满足条件的一个状态。

2022-9-2何以包邮(01背包变形)(c/c++实测满分)相关推荐

  1. codeforce Gym 101102A Coins (01背包变形)

    01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...

  2. P1734 最大约数和 01背包变形

    传送门 思路:01背包变形题.将i看成重量,i的因子看成价值即可.背包自然是s. /** * From: * Qingdao Agricultural University * Created by ...

  3. HDU 2546 饭卡 01背包变形

    饭卡 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  4. HDU 3466 01背包变形

    给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...

  5. poj 2063 Investment(01背包变形)

    http://poj.org/gotoproblem?pid=2063 (1)上限 m 一直上升的 n 次01背包问题,比一般的01背包多了一重循环: (2)本题出现了各种错误:1)刚开始,没注意 m ...

  6. hdu 2184 01背包变形

    转自:http://blog.csdn.net/liuqiyao_01/article/details/8753686 题意:这是又是一道01背包的变体,题目要求选出一些牛,使smartness和fu ...

  7. uestc oj 1218 Pick The Sticks (01背包变形)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...

  8. #1353 : 满减优惠(01背包变形)

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  9. UVA 12563 Jin Ge Jin Qu hao 01背包变形

    基本的01背包,更新的时候保持背包里每一个元素的num最大然后time尽量长 CSDN也支持makedown了试一下 12563 Jin Ge Jin Qu hao (If you smiled wh ...

最新文章

  1. StratifiedShuffleSplit 交叉验证
  2. 最常见的HTTP错误
  3. 我常用的eclipse快捷键
  4. CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
  5. float.equals_Java Float类equals()方法与示例
  6. Swift UISearchController
  7. MD5 算法描述及实现
  8. linux windows变色龙,体验开源变色龙SUSE Linux Enterprise Server 11
  9. “彪悍人生”罗永浩被法院限制消费,网友:期待王者归来
  10. Excel中CONCATENATE函数生成SQL insert 语句
  11. svn 查看版本历史时。Item is not readable svn: 条目不可读
  12. 《图像语义分析》学习笔记 (二)
  13. 基线管理之Windows安全配置
  14. 0x00007FF73361E515 处(位于 基于多态的职工管理系统.exe 中)引发的异常: 0xC0000005: 职工岗位输入不是1,2,3,而是其他乱七八糟的
  15. 服务器C盘内存不足,发现C盘TEMP文件夹占用44G
  16. Pr 复古胶片老电影回忆效果
  17. 【深度学习】【ICCV2019】FCOS
  18. 通过GET_TAX_PERCENTAGE 函数获取税率
  19. 企业微信怎么分享名片给用户?如何统计名片添加好友的效果?
  20. 4. 多重背包问题 I

热门文章

  1. html table colgroup,关于HTML colgroup标签的用法你知道哪些?colgroup用法和col的详细介绍...
  2. 安卓开发中的访问权限问题
  3. 第二次罗塞塔学习总结
  4. YOLOv3无法调动gpu
  5. 8051AVR PIC 单片机
  6. 【数学】从零开始学统计
  7. 程序员万能电子书网站
  8. Visio绘制长方体
  9. Word:英文从“单词”中间断行
  10. 计算机工程好发论文么,《计算机工程》文章投稿发表有感