这是一个完全背包问题,要分四种情况讨论: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 完全背包 好题)相关推荐

  1. 动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包,混合背包

    动态规划dp(带模板题の超易懂版):01背包,完全背包,分组背包,多重背包 01背包 && 完全背包 && 分组背包 の 视频教程:https://www.bilibi ...

  2. 选拔赛proA:经营小卖部

    64位整数读入用 lld Problem A: 经营小卖部 Time Limit: 1 Sec  Memory Limit: 128 MB Description 暑假很多店都关门了,还坚持营业的店可 ...

  3. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  4. 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 ...

  5. 最大报销额 HDU - 1864(DP+01背包)

    最大报销额 HDU - 1864 点击跳转↑ 题设:多组输入,每组输入一对Q和N,分别代表当前的公费,和需要报销的账单总数.接下来N行,每行开始一个m,接下来是m项物品的名称和价格.求:在所有符合报销 ...

  6. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  7. ZOJ 3450 Doraemon's Railgun (DP·分组背包)

    题意  多啦A梦有一个超电磁炮  然后要打死n堆敌人  在同一条射线上的敌人只有先打死前面的一堆才能打后面的一堆  给你打死某堆敌人需要的时间和这堆敌人的人数   问你在T0时间内最多打死多少个敌人 ...

  8. 【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 ...

  9. dp训练第25题 vijos 1059 积木城堡 背包

    给定n(100)个数字集合,每个集合最多由100个小于等于100的数从小到大排列而成(不重复). 现在要将每个集合中可以删去一些数,使得各个集合的数字和相等,若有多解取和最大的.无解输出-1. 背包题 ...

最新文章

  1. lr:lr中错误解决方法19种
  2. ***CSS魔法堂:选择器及其优先级
  3. SQLServer 2005删除无主键表中的重复项
  4. 使用OpenSSH远程管理Linux服务器
  5. 倒计时5天:5G还是6G?
  6. 最优化学习笔记(五)——牛顿法(多维数据)
  7. C++中long是什么类型
  8. 被监控机上安装nagios插件和nrpe(nrpe添加为xinetd服务)
  9. 淘淘商城系列——Redis的安装
  10. Tomcat发布项目后JS中文乱码
  11. 使用代码控制小米智能插座
  12. 第六届CCF计算机职业资格认证考试题解(C++)
  13. UA MATH524 复变函数 验证一个函数是否为调和函数
  14. 关于销售订单高级定价的一点疑惑
  15. b站直播消费记录爬取
  16. java byte与char互转原理_java byte与char互转原理
  17. sans用计算机演奏有歌词儿,Sans toi歌词 Joyce Jonathan、曲婉婷_晴格歌词网
  18. 配置NTP时间客户端
  19. 自闭症婴幼儿对人脸的注意偏好
  20. 高速数据采集卡的数据参数表征

热门文章

  1. ARFoundation多图识别的一个脚本
  2. 木瓜移动再度荣获2022“Google优秀合作伙伴”
  3. python 北上资金_python爬虫技术:北向资金数据自动爬取!
  4. 海量服务实践──手 Q 游戏春节红包项目设计与总结(上篇)
  5. mysql二级考试范围_计算机二级MySQL考试内容大纲
  6. Eigen学习总结1
  7. nRF 主机扫描过滤器
  8. 从图片到dataframe——语义分割数据集制作全流程
  9. 微信小程序引用外部文件找不到文件报错问题
  10. css样式压缩了怎么还原,CSS代码的压缩方法