csu1671 经营小卖部(DP 完全背包 好题)
这是一个完全背包问题,要分四种情况讨论:1.什么工具都不买 2.买微波炉 3.买冰箱 4.买微波炉 和 冰箱 。然后取其中利润最大的一种
状态 dp[j] : 所给资金为j时的最大营业额。
转移方程: dp[j]=max{dp[j],dp[j-ci]+wi} //这里的wi指的是单个物品的利润。
以下为代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>using namespace std;struct snode
{int c,w,A;
}a[123];
int dp[1234];
int main()
{// freopen("in.txt","r",stdin);int T;scanf("%d",&T);while(T--){memset(a,0,sizeof(a));memset(dp,0,sizeof(dp));int X,n,p1,p2;int maxx=0;scanf("%d%d%d%d",&X,&n,&p1,&p2);for(int i=0;i<n;i++)scanf("%d%d%d",&a[i].c,&a[i].w,&a[i].A);for(int i=0;i<n;i++){if(a[i].A!=0)continue; //什么工具都不买。for(int j=a[i].c;j<=X;j++)dp[j]=max(dp[j],dp[j-a[i].c]+a[i].w-a[i].c);}maxx=max(maxx,dp[X]);if(X-p1>0){ //买冰箱memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){if(a[i].A==2)continue;for(int j=a[i].c;j<=X-p1;j++) //这里相当于把买工具的钱先扣除了。dp[j]=max(dp[j],dp[j-a[i].c]+a[i].w-a[i].c);}maxx=max(maxx,dp[X-p1]-p1); //注意利润是dp[X-p1]-p1; 因为最开始买工具的钱要算在成本里}if(X-p2>0){ //买微波炉memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){if(a[i].A==1)continue;for(int j=a[i].c;j<=X-p2;j++)dp[j]=max(dp[j],dp[j-a[i].c]+a[i].w-a[i].c);}maxx=max(maxx,dp[X-p2]-p2);}if(X-p1-p2>0){//两种工具都买memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){for(int j=a[i].c;j<=X-p2-p1;j++)dp[j]=max(dp[j],dp[j-a[i].c]+a[i].w-a[i].c);}maxx=max(maxx,dp[X-p1-p2]-p1-p2);}printf("%d\n",maxx);}return 0;
}
csu1671 经营小卖部(DP 完全背包 好题)相关推荐
- 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包
动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...
- 选拔赛proA:经营小卖部
64位整数读入用 lld Problem A: 经营小卖部 Time Limit: 1 Sec Memory Limit: 128 MB Description 暑假很多店都关门了,还坚持营业的店可 ...
- HDU 1248 寒冰王座(全然背包:入门题)
HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...
- Jam's balance HDU - 5616 (01背包基础题)
Jim has a balance and N weights. (1≤N≤20) The balance can only tell whether things on different side ...
- 最大报销额 HDU - 1864(DP+01背包)
最大报销额 HDU - 1864 点击跳转↑ 题设:多组输入,每组输入一对Q和N,分别代表当前的公费,和需要报销的账单总数.接下来N行,每行开始一个m,接下来是m项物品的名称和价格.求:在所有符合报销 ...
- hdu 1171 dp(多重背包)
View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...
- ZOJ 3450 Doraemon's Railgun (DP·分组背包)
题意 多啦A梦有一个超电磁炮 然后要打死n堆敌人 在同一条射线上的敌人只有先打死前面的一堆才能打后面的一堆 给你打死某堆敌人需要的时间和这堆敌人的人数 问你在T0时间内最多打死多少个敌人 ...
- 【POJ - 3624 】Charm Bracelet (dp,0-1背包裸题)
题干: Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to ...
- dp训练第25题 vijos 1059 积木城堡 背包
给定n(100)个数字集合,每个集合最多由100个小于等于100的数从小到大排列而成(不重复). 现在要将每个集合中可以删去一些数,使得各个集合的数字和相等,若有多解取和最大的.无解输出-1. 背包题 ...
最新文章
- lr:lr中错误解决方法19种
- ***CSS魔法堂:选择器及其优先级
- SQLServer 2005删除无主键表中的重复项
- 使用OpenSSH远程管理Linux服务器
- 倒计时5天:5G还是6G?
- 最优化学习笔记(五)——牛顿法(多维数据)
- C++中long是什么类型
- 被监控机上安装nagios插件和nrpe(nrpe添加为xinetd服务)
- 淘淘商城系列——Redis的安装
- Tomcat发布项目后JS中文乱码
- 使用代码控制小米智能插座
- 第六届CCF计算机职业资格认证考试题解(C++)
- UA MATH524 复变函数 验证一个函数是否为调和函数
- 关于销售订单高级定价的一点疑惑
- b站直播消费记录爬取
- java byte与char互转原理_java byte与char互转原理
- sans用计算机演奏有歌词儿,Sans toi歌词 Joyce Jonathan、曲婉婷_晴格歌词网
- 配置NTP时间客户端
- 自闭症婴幼儿对人脸的注意偏好
- 高速数据采集卡的数据参数表征
热门文章
- ARFoundation多图识别的一个脚本
- 木瓜移动再度荣获2022“Google优秀合作伙伴”
- python 北上资金_python爬虫技术:北向资金数据自动爬取!
- 海量服务实践──手 Q 游戏春节红包项目设计与总结(上篇)
- mysql二级考试范围_计算机二级MySQL考试内容大纲
- Eigen学习总结1
- nRF 主机扫描过滤器
- 从图片到dataframe——语义分割数据集制作全流程
- 微信小程序引用外部文件找不到文件报错问题
- css样式压缩了怎么还原,CSS代码的压缩方法