• [codeforces][dp]


    链接:https://ac.nowcoder.com/acm/problem/21314
    来源:牛客网

    题目描述

    牛牛正在打一场CF
    比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码
    第i道题的分数为maxPoints[i],题目的分数随着比赛的进行,每分钟减少pointsPerMinute[i]
    这是一场比较dark的Cf,分数可能减成负数
    已知第i道题需要花费 requiredTime[i] 的时间解决
    请问最多可以得到多少分

    输入描述:

    第一行输入两个整数N,T (1 ≤ N ≤ 50, 1 ≤ T ≤ 100000)
    第二行输入n个整数maxPoints[i]
    第三行输入n个整数pointsPerMinute[i]
    第四行输入n个整数requiredTime[i]
    1 ≤ maxPoints[i],pointsPerMinute[i],requiredTime[i] ≤ 100000

    输出描述:

    输出一个整数
    示例1

    输入

    1 74
    502
    2
    47

    输出

    408
    示例2

    输入

    2 40000
    100000 100000
    1 100000
    50000 30000

    输出

    0
    示例3

    输入

    3 75
    250 500 1000
    2 4 8
    25 25 25

    输出

    1200
    示例4

    输入

    3 30
    100 100 100000
    1 1 100
    15 15 30

    输出

    97000

    备注:

    子任务1: n <= 10
    子任务2: n <= 20
    子任务3: 无限制
    题意:给出一些任务,每个任务都有一个初始分ai,每分钟会降低bi(可以降低到负分),完成这个任务需要花费ci分钟,求最多可以得到的分数
    题解:容易看出是个dp,又由于bi影响着ai每个时刻的值,所以做任务的顺序影响着dp结果,想要得到最优的dp结果就需要进行排序,假设有两个任务1和2,那么二者可以得到的分数为如果先做1,则=a1+a2-b1*c1-b2*(c1+c2),如果先做2,则=a1+a2-b2*c2-b1*(c1+c2),则排序条件就应该是a1+a2-b1*c1-b2*(c1+c2)>a1+a2-b2*c2-b1*(c1+c2)
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 struct pot{
     5     ll q;
     6     ll w;
     7     ll e;
     8 }p[55];
     9 bool cmp(struct pot aa,struct pot bb){
    10     return (aa.e+bb.e)*bb.w+aa.e*aa.w<(aa.e+bb.e)*aa.w+bb.e*bb.w;
    11 }
    12 ll dp[100005];
    13 int main()
    14 {
    15     ll n,t;
    16     scanf("%lld%lld",&n,&t);
    17     for(int i=1;i<=n;i++){
    18         scanf("%lld",&p[i].q);
    19     }
    20     for(int i=1;i<=n;i++){
    21         scanf("%lld",&p[i].w);
    22     }
    23     for(int i=1;i<=n;i++){
    24         scanf("%lld",&p[i].e);
    25     }
    26     ll ans=0;
    27     sort(p+1,p+1+n,cmp);
    28         for(int i=1;i<=n;i++){
    29             for(int j=t;j>=p[i].e;j--){
    30                     dp[j]=max(dp[j],dp[j-p[i].e]+p[i].q-(p[i].w)*(j));
    31                     ans=max(ans,dp[j]);
    32         }
    33     }
    34     printf("%lld
    ",ans);
    35     return 0;
    36 }
    View Code
  • 相关阅读:
    multilabel-multiclass classifier
    关于zabbix _get返回Could not attach to pid的问题
    python导出环境依赖到req,txt文件中
    inode满的解决方法
    搞定面试官:咱们从头到尾再说一次 Java 垃圾回收
    SpringBoot项目,如何优雅的把接口参数中的空白值替换为null值?
    万万没想到,JVM内存区域的面试题也可以问的这么难?
    万万没想到,面试中,连 ClassLoader类加载器 也能问出这么多问题…..
    npm私服verdaccio报sha错误的解决方案
    配置SQL Server 2016无域AlwaysOn(转)
  • 原文地址:https://www.cnblogs.com/MekakuCityActor/p/10826388.html
Copyright © 2020-2023  润新知