题目描述

一共有n件食材,每件食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间。

众所周知,gw的厨艺不怎么样,所以他需要你设计烹调方案使得美味指数最大

输入输出格式

输入格式:

第一行是两个正整数T和n,表示到达地球所需时间和食材个数。

下面一行n个整数,ai

下面一行n个整数,bi

下面一行n个整数,ci

输出格式:

输出最大美味指数

输入输出样例

输入样例#1:

74 1
502
2
47

输出样例#1:

408

思路:

一开始没想明白,看了 tinylic 大佬的解释后才明白的

如果没有 b 属性的话,那么是一个标准的 01 背包题

根据题意,假设现在已经耗费了 t 时间,那么有:

  • a[x]-(t+c[x])*b[x]+a[y]-(t+c[x]+c[y])*b[y]

  • a[y]-(t+c[y])*b[y]+a[x]-(t+c[y]+c[x])*b[x]

化简后,得到式1>式2的条件是 c[x]*b[y]<c[y]*b[x],因此只要满足这个条件的物品对(x,y),x在y前的代价永远最优,根据这个条件排序后,就是简单的01背包

源代码

#include<iostream>
#include<algorithm>
using namespace std;int max(int x,int y)
{if(x>y) return x;else return y;
}struct food{//结构体long long ai;long long bi;long long ci;
}arr[10000000];bool cmp(food x,food y)
{return x.ci*y.bi<y.ci*x.bi;//比较美味度
}long long dp[10000000]={0};
int main()
{long long t,n;long long i,j;long long result=0;cin>>t>>n; //到达地球时间与食物个数for(i=1;i<=n;i++) cin>>arr[i].ai;//属性afor(i=1;i<=n;i++) cin>>arr[i].bi;//属性bfor(i=1;i<=n;i++) cin>>arr[i].ci;//属性csort(arr+1,arr+1+n,cmp);//对各种食材的美味度进行比较for(i=1;i<=n;i++)//遍历每种食材for(j=t;j-arr[i].ci>=0;j--)//至各食材制作时间等于总时间为止dp[j]=max(dp[j],dp[j-arr[i].ci]+arr[i].ai-j*arr[i].bi);//arr[i].ai-j*arr[i].bi即美味指数for(i=1;i<=t;i++)  result=max(result,dp[i]);//寻找最大值cout<<result<<endl;return 0;
}

烹调方案(洛谷-P1417)相关推荐

  1. 洛谷P1417 烹调方案

    洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...

  2. 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案

    [题目链接] ybt 1844:[06NOIP提高组]金明的预算方案 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 [题目考点] 1. 动态规划:分组背包 2. 动态规划:依赖背包 ...

  3. 洛谷 P1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  4. 洛谷 P1417 烹调方案 (01背包拓展)

    一看到这道题就是01背包 但是我注意到价值和当前的时间有关. 没有想太多,直接写,0分 然后发现输入方式不对-- 改了之后只有25分 我知道wa是因为时间会影响价值,但不知道怎么做. 后来看了题解,发 ...

  5. 洛谷—P1417 烹调方案(背包问题)

    解题思路: 如果没有b[i]这个属性的话就是明显的01背包问题. 现在考虑相邻的两个物品x,y.假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(p+c[x])*b[x]+a[y] ...

  6. 洛谷P1417:优先级与背包问题

    题目分析 如果没有时间的影响的话,这就是一个简单的01背包问题. 可是有. 这个时候可以通过排序,而优先级呢,来解决. 假如此时此刻是p,有x和y两道菜,如果先做x比先做y优,则有: a[x]-(p+ ...

  7. 洛谷 1417 烹调方案

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  8. 【每日DP】day4 P1417 烹调方案(奇怪的01背包增加了)难度⭐⭐⭐

    P1417 烹调方案 每件物品只有一个,很明显是01背包,但是价值的转换方式不同,是要求 ai−t∗bia_i-t*b_iai​−t∗bi​ 尽可能最大.普通的01背包的价值是不变的,而这一道题目中的 ...

  9. p1417 烹调方案_Java 8的烹调方式–拼图项目

    p1417 烹调方案 什么是Project Jigsaw:Project Jigsaw是使Java编译器模块知道的项目. 多年以来,Java API一直是单块的,即从代码的任何部分都可以平等地看到整个 ...

最新文章

  1. Spring Cloud(二)Consul 服务治理实现
  2. extjs4.0的高级组件grid补充01选择模式selection和表格特性feature
  3. stm32硬件设计手册_基于STM32自制三菱PLC之软硬件设计
  4. 茅台少女踩曲玄机何在?
  5. prometheus命令_Prometheus
  6. 线程重命名java_线程重命名(Netty)和设计模式Decorator
  7. shiro 不过滤指定的带参数url_原创干货 | 过滤器设计缺陷导致权限绕过
  8. mysql executereader_ExecuteReader的用法
  9. html版权登记怎么打,版权符号怎么输入_Html版权符号怎么打
  10. 实现win 10 电脑版微信双开
  11. MyBatis_查询缓存01
  12. 数据恢复中的“老大难”:文件碎片 | 专家约稿
  13. 解决idea里面Tomcat无论怎么重新启动总是启动原先的项目问题
  14. 蛋白组学资讯:百趣协助,非小细胞癌转移机制新解
  15. word文档中的页码问题
  16. 肿瘤细胞膜包裹纳米颗粒|MIA-PaCa-2胰腺癌细胞膜纳米金颗粒|使用周期:6-12个月
  17. 10个帮程序员减压放松的网站,爽!
  18. java tcp 乱码_Java和C++通过Socket通信中文乱码的解决
  19. web系统维护时显示维护状态页面
  20. c语言字符游动程序,C语言实现扫雷小游戏详解

热门文章

  1. 2018世界幸福指数中国排第86,这种报告是怎样做出来的?
  2. 可口可乐在人工智能和大数据领域的7项应用
  3. 一觉醒来,没有购房资格了!
  4. 骚操作!他居然同时给谷歌和 Facebook 上班干活
  5. 什么是 “马太效应” ?
  6. 《JEECG_v3 开发手册》文档发布通知
  7. maven 热部署 web应用
  8. 微信和钉钉电脑客户端多开的解决方法(Windows 10)
  9. Document API
  10. 三元表达式列表解析生成器表达式