zoukankan      html  css  js  c++  java
  • P1417 烹调方案

    题目背景

    由于你的帮助,火星只遭受了最小的损失。但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

    【题目来源】

    tinylic改编

    Solution:

      本题直接跑$0/1$背包只有$30$分,原因是价值会随着时间而改变,具有后效性。(此类价值或者花费不固定的问题可以参考背包九讲——泛化物品)。

      此时考虑对物品排序,取消后效性。

      我们假设当前时间为$t$,在物品$1,2$中选择,存在两种情况:

      1、先选$1$再选$2$的价值为:$a1-b1*(t+c1)+a2-b2*(t+c1+c2)$;

      2、先选$2$再选$1$的价值为:$a2-b2*(t+c2)+a1-b1*(t+c1+c2)$;

      当第一种情况价值$<$第二种情况价值时,对两式化简的得:$$b1*c2<b2*c1$$

      于是我们按上述式子对物品从大到小排序,取消后效性后就是一个简单的$0/1$背包了。

    代码:

    #include<bits/stdc++.h>
    #define For(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
    #define Bor(i,a,b) for(int (i)=(b);(i)>=(a);(i)--)
    #define Max(a,b) (a)>(b)?(a):(b)
    #define ll long long
    using namespace std;
    const int N=1e5+7;
    ll n,T,f[N],ans;
    struct node{
        ll a,b,c;
        bool operator<(const node d)const{return b*d.c>d.b*c;}
    }t[51];
    int main(){
        ios::sync_with_stdio(0);
        cin>>T>>n;
        For(i,1,n)cin>>t[i].a;
        For(i,1,n)cin>>t[i].b;
        For(i,1,n)cin>>t[i].c;
        sort(t+1,t+n+1);
        For(i,1,n) Bor(j,t[i].c,T) f[j]=Max(f[j],f[j-t[i].c]+t[i].a-t[i].b*j);
        For(i,1,T)ans=Max(ans,f[i]);
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    (6)UIView常见属性二
    linux系统中不间断会话服务screen命令
    linux系统中配置sshd服务(远程控制服务)
    Linux系统中远程传输命令scp
    linux系统中防火墙管理工具iptables
    什么是端口?
    linux系统实现会话共享功能
    linux系统中远程控制服务安全密码验证 sshkeygen命令
    linux系统中防火墙策略管理工具firewalld
    linux系统中nmcli命令、查看、添加、删除、编辑网络会话
  • 原文地址:https://www.cnblogs.com/five20/p/8999339.html
Copyright © 2011-2022 走看看