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;
    }
  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/five20/p/8999339.html
Copyright © 2011-2022 走看看