得分(dp)

该博客讨论了如何在有限的时间内选择并按顺序完成具有不同完成时间和难度系数的题目,以最大化得分。通过动态规划的方法,可以找出最优解,确保在给定时间内获得最高分数。博客提供了样例输入和输出,以及问题的解决方案和代码实现。
摘要由CSDN通过智能技术生成

题目描述
现在 zql手上有 N 道题,他总共有 T 的时间来完成他们中的一些或全部。每道题有一个完成所需时间 t[i]和一个难度系数 c[i]。如果 zql 在剩余 x 个单位时间的时候开始做题i,并且能够完成,那么总分加上 x*c[i]。现在 zql 要从这 N 道题中选出一些在T个单位时间内完成,并且按照某种顺序依次完成它们(zql 每个单位时间只能做一道题,并且一旦他决定做某题就会一直做直到做完),那么他最多能够拿到多少分呢?

输入
总共包括 N+1 行
第一行,两个用空格隔开的正整数 N 和 T,分别表示题目总数和总时间。
第 2 到 N+1 行,每行包含两个正整数,第 i+1 行的两个正整数分别表示 t[i]和 c[i].

输出
共包括 1 行。 一行一个整数,表示最大能够得到的分数。

样例输入
【样例1】
3 10
2 1
8 9
2 5
【样例2】
3 12
3 6
7 5
4 2

样例输出
【样例1】
122
【样例2】
117

提示
样例1解释:最优方案为在剩余 10 个单位时间的时候开始做第 3 题(需要 2 个单位时间),剩余 8 个单位时间的时候开始做第 2 题(需要 8 个单位时间),总得 分为 10×5+(10-2)×9=122。

对于20%的数据,N≤8,T≤200。
对于60%的数据,N≤15,T≤1000。
对于90%的数据,N≤2000且满足T不小于做完N道题所需时间的总和。
对于100%的数据,N≤3000,T≤10000,所有ti和ci均不超过100。保证答案在 32 位有符号整型范围内。

思路
根据x[i]*t[j]得出每两个问题的所占权值差,并排序,DP直接推解即可

代码实现

#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值