烹调方案「建议收藏」

烹调方案「建议收藏」烹调方案

大家好,又见面了,我是你们的朋友全栈君。

题目背景

由于你的帮助,火星只遭受了最小的损失。但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星。不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~

gw还是会做饭的,于是拿出了储藏的食物准备填饱肚子。gw希望能在T时间内做出最美味的食物,但是这些食物美味程度的计算方式比较奇葩,于是绝望的gw只好求助于你了。

题目描述

一共有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

说明

【数据范围】

对于40%的数据1<=n<=10

对于100%的数据1<=n<=50

所有数字均小于100,000

分析

b[i]是个不好的东西,qwq,如果没有它呢,就是一个超级无敌水的01背包啦。。。。

然后,b[i]它出现了。。。

我们用一个贪心的思想,讨论如果i,j相邻,那么算出i在前和j在前分别对答案的贡献,看看谁在前更优呢,qwq。。。

设i,j为相邻两个物品,且之前已经花了t个时间。。。

当i在前 W1=a[i]-(t+c[i])*b[i]+a[j]-(t+c[i]+c[j])*b[j]=a[i]-t*b[i]-c[i]*b[i]+a[j]-t*b[j]-c[i]*b[j]-c[j]*b[j]

当j在前 W2=a[j]-(t+c[j])*b[j]+a[i]-(t+c[j]+c[i])*b[i]=a[j]-t*b[j]-c[j]*b[j]+a[i]-t*b[i]-c[j]*b[i]-c[i]*b[i]

然后我们来看看,如果W1大于等于W2会怎么样呢,数学移项合并会吧,qwq

∵W1>=W2

∴a[i]-t*b[i]-c[i]*b[i]+a[j]-t*b[j]-c[i]*b[j]-c[j]*b[j]>=a[j]-t*b[j]-c[j]*b[j]+a[i]-t*b[i]-c[j]*b[i]-c[i]*b[i]

消去a[i],a[j],t*b[i],c[i]*b[i],t*b[j],c[j]*b[j]

∴-c[i]*b[j]>=-c[j]*b[i],c[i]*b[j]<=c[j]*b[i]

∴当c[i]*b[j]<=c[j]*b[i]时候,i物品在j物品前面肯定更优,那我们就把数组按照上面的顺序排个序,在背个包,就好啦!!!

#include <cstdio>
#include <cmath>
#include <deque>
#include <stack>
#include <queue>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define ll long long
#define ull unsigned long long

const int Maxn=100001;
const int inf=2147483647;

ll n,m,T;
ll f[Maxn];
struct node { ll a,b,c; }p[Maxn];
bool cmp(node a,node b) {
    return a.c*b.b<=b.c*a.b;
}    
ll ma(ll a,ll b) { return a>b?a:b; }
int main() {
    scanf("%lld%lld",&T,&n);
    for(ll i=1; i<=n; i++) scanf("%lld",&p[i].a);
    for(ll i=1; i<=n; i++) scanf("%lld",&p[i].b);
    for(ll i=1; i<=n; i++) scanf("%lld",&p[i].c);
    sort(p+1,p+n+1,cmp);
    f[0]=0;
    for(ll i=1; i<=n; i++)
        for(ll j=T; j>=p[i].c; j--) 
            f[j]=max(f[j],f[j-p[i].c]+p[i].a-(j*p[i].b));
    ll ans=0;
    for(ll i=1; i<=T; i++)
        ans=ma(ans,f[i]);
    printf("%lld\n",ans);
    return 0;
}

 

然而,最后一个点RE了,找不出来错呢,嘤嘤嘤,不管了,数学分析最重要!!!qwq

 

转载于:https://www.cnblogs.com/Shen-Yu/p/9885917.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107221.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c3p0 连接池的日志配置

    c3p0 连接池的日志配置如果用c3p0的话,经常会看到控制台上报一个警告,具体内容不急得了,大意是无法初始化MLog日志,请初始化log4j出现此种情况是因为使用的c3p0这个连接池,并且没有正确配置其日志,只要把下面这段加到log4j.properties中即可##########################################################################

    2022年5月13日
  • spss 卡方检验,Logistic回归方法「建议收藏」

    spss 卡方检验,Logistic回归方法「建议收藏」案例:新生儿体重较低影响因素1:影响因素分析,求出哪些自变量对因变量发生概率有影响,并计算各自变量对因变量的比数比;2:作为判别分析方法,来估计各种自变量组合条件下因变量各类别的发生概率,从而对结局进行预测,该模型在结果上等价于判别分析;说明:低出生体重标准:新生儿体重<2500克结果变量为是否娩出低出生体重儿,变量名为low,1=低出生体重,0=非低出生体重;考虑的影响因素…

    2022年5月16日
  • WPF教程2013新版「建议收藏」

    视频目录:(一)WPF基础:控件模型、XAML基础、基础控件【.Net培训—第三季WPF教程】001-课程说明【.Net培训—第三季WPF教程】002-VisualStudio下WPF开发环境的基本使用.zip【.Net培训—第三季WPF教程】003-sender是什么.zip【.Net培训—第三季WPF教程】004-复习继承和类型转换.zip【.Net培训—第三季WPF教程】005-集…

    2022年4月9日
  • ioctl+FIONREAD判断文件可读

    ioctl+FIONREAD判断文件可读linux下判断一个文件描述符是否可读可用ioctl,参数FIONREAD,包含头文件unistd.hwindows下有个类似的ioctlsocket,实现了ioctl的部分功能,也可以实现同样的功能。https://blog.csdn.net/tgdzsjh/article/details/17142949https://blog.csdn.net/wy_kath/article/d…

    2022年7月23日
  • hdu 4063 Aircraft 计算几何+最短路

    hdu 4063 Aircraft 计算几何+最短路

    2022年1月19日
  • 在laravel框架中使用ajax请求报错419

    在laravel框架中使用ajax请求报错419

    2021年10月27日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号