烹调方案(洛谷-P1417)
题目描述
一共有n件食材,每件食材有三个属性,ai,bi和ci,如果在t时刻完成第i样食材则得到ai-t*bi的美味指数,用第i件食材做饭要花去ci的时间。
众所周知,gw的厨艺不怎么样,所以他需要你设计烹调方案使得美味指数最大
输入输出格式
输入格式:
第一行是两个正整数T和n,表示到达地球所需时间和食材个数。
下面一行n个整数,ai
下面一行n个整数,bi
下面一行n个整数,ci
输出格式:
输出最大美味指数
输入输出样例
思路:
一开始没想明白,看了 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)相关推荐
- 洛谷P1417 烹调方案
洛谷P1417 烹调方案 如果是一般的01背包的话 选的先后是没关系的 但是这题选的先后是有关系的,因为他的价值是随着时间而变化的, 而你的01背包是做不到先选2再选1的 那么我们就跟国王游戏一样 用 ...
- 信息学奥赛一本通 1844:【06NOIP提高组】金明的预算方案 | 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案
[题目链接] ybt 1844:[06NOIP提高组]金明的预算方案 洛谷 P1064 [NOIP2006 提高组] 金明的预算方案 [题目考点] 1. 动态规划:分组背包 2. 动态规划:依赖背包 ...
- 洛谷 P1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 洛谷 P1417 烹调方案 (01背包拓展)
一看到这道题就是01背包 但是我注意到价值和当前的时间有关. 没有想太多,直接写,0分 然后发现输入方式不对-- 改了之后只有25分 我知道wa是因为时间会影响价值,但不知道怎么做. 后来看了题解,发 ...
- 洛谷—P1417 烹调方案(背包问题)
解题思路: 如果没有b[i]这个属性的话就是明显的01背包问题. 现在考虑相邻的两个物品x,y.假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(p+c[x])*b[x]+a[y] ...
- 洛谷P1417:优先级与背包问题
题目分析 如果没有时间的影响的话,这就是一个简单的01背包问题. 可是有. 这个时候可以通过排序,而优先级呢,来解决. 假如此时此刻是p,有x和y两道菜,如果先做x比先做y优,则有: a[x]-(p+ ...
- 洛谷 1417 烹调方案
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 【每日DP】day4 P1417 烹调方案(奇怪的01背包增加了)难度⭐⭐⭐
P1417 烹调方案 每件物品只有一个,很明显是01背包,但是价值的转换方式不同,是要求 ai−t∗bia_i-t*b_iai−t∗bi 尽可能最大.普通的01背包的价值是不变的,而这一道题目中的 ...
- p1417 烹调方案_Java 8的烹调方式–拼图项目
p1417 烹调方案 什么是Project Jigsaw:Project Jigsaw是使Java编译器模块知道的项目. 多年以来,Java API一直是单块的,即从代码的任何部分都可以平等地看到整个 ...
最新文章
- Spring Cloud(二)Consul 服务治理实现
- extjs4.0的高级组件grid补充01选择模式selection和表格特性feature
- stm32硬件设计手册_基于STM32自制三菱PLC之软硬件设计
- 茅台少女踩曲玄机何在?
- prometheus命令_Prometheus
- 线程重命名java_线程重命名(Netty)和设计模式Decorator
- shiro 不过滤指定的带参数url_原创干货 | 过滤器设计缺陷导致权限绕过
- mysql executereader_ExecuteReader的用法
- html版权登记怎么打,版权符号怎么输入_Html版权符号怎么打
- 实现win 10 电脑版微信双开
- MyBatis_查询缓存01
- 数据恢复中的“老大难”:文件碎片 | 专家约稿
- 解决idea里面Tomcat无论怎么重新启动总是启动原先的项目问题
- 蛋白组学资讯:百趣协助,非小细胞癌转移机制新解
- word文档中的页码问题
- 肿瘤细胞膜包裹纳米颗粒|MIA-PaCa-2胰腺癌细胞膜纳米金颗粒|使用周期:6-12个月
- 10个帮程序员减压放松的网站,爽!
- java tcp 乱码_Java和C++通过Socket通信中文乱码的解决
- web系统维护时显示维护状态页面
- c语言字符游动程序,C语言实现扫雷小游戏详解