2022-9-2何以包邮(01背包变形)(c/c++实测满分)
总结:
此题是背包问题的变形,物品的价值和重量有所改变,背包的容量限制有所改变,但核心动态规划求法没有改变。只需要在背包问题的解法上根据题意对物品表示,答案输出进行改变即可。
背包算法: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++实测满分)相关推荐
- codeforce Gym 101102A Coins (01背包变形)
01背包变形,注意dp过程的时候就需要取膜,否则会出错. 代码如下: #include<iostream> #include<cstdio> #include<cstri ...
- P1734 最大约数和 01背包变形
传送门 思路:01背包变形题.将i看成重量,i的因子看成价值即可.背包自然是s. /** * From: * Qingdao Agricultural University * Created by ...
- HDU 2546 饭卡 01背包变形
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 3466 01背包变形
给出物品数量N和总钱数M 对于N个物品.每一个物品有其花费p[i], 特殊值q[i],价值v[i] q[i] 表示当手中剩余的钱数大于q[i]时,才干够买这个物品 首先对N个物品进行 q-p的排序,表 ...
- poj 2063 Investment(01背包变形)
http://poj.org/gotoproblem?pid=2063 (1)上限 m 一直上升的 n 次01背包问题,比一般的01背包多了一重循环: (2)本题出现了各种错误:1)刚开始,没注意 m ...
- hdu 2184 01背包变形
转自:http://blog.csdn.net/liuqiyao_01/article/details/8753686 题意:这是又是一道01背包的变体,题目要求选出一些牛,使smartness和fu ...
- uestc oj 1218 Pick The Sticks (01背包变形)
题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可 ...
- #1353 : 满减优惠(01背包变形)
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- UVA 12563 Jin Ge Jin Qu hao 01背包变形
基本的01背包,更新的时候保持背包里每一个元素的num最大然后time尽量长 CSDN也支持makedown了试一下 12563 Jin Ge Jin Qu hao (If you smiled wh ...
最新文章
- StratifiedShuffleSplit 交叉验证
- 最常见的HTTP错误
- 我常用的eclipse快捷键
- CentOS 6.5系统安装配置LAMP(Apache+PHP5+MySQL)服务器环境
- float.equals_Java Float类equals()方法与示例
- Swift UISearchController
- MD5 算法描述及实现
- linux windows变色龙,体验开源变色龙SUSE Linux Enterprise Server 11
- “彪悍人生”罗永浩被法院限制消费,网友:期待王者归来
- Excel中CONCATENATE函数生成SQL insert 语句
- svn 查看版本历史时。Item is not readable svn: 条目不可读
- 《图像语义分析》学习笔记 (二)
- 基线管理之Windows安全配置
- 0x00007FF73361E515 处(位于 基于多态的职工管理系统.exe 中)引发的异常: 0xC0000005: 职工岗位输入不是1,2,3,而是其他乱七八糟的
- 服务器C盘内存不足,发现C盘TEMP文件夹占用44G
- Pr 复古胶片老电影回忆效果
- 【深度学习】【ICCV2019】FCOS
- 通过GET_TAX_PERCENTAGE 函数获取税率
- 企业微信怎么分享名片给用户?如何统计名片添加好友的效果?
- 4. 多重背包问题 I