充电桩的收益(station)

合肥市第39届信息学竞赛(2022年)

题目描述 Description

小可可在小区里安装了一个电动汽车充电桩,将自家充电桩的空闲时间开放给其他电动车用户付费使用。这种共享充电模式能充分提高闲置充电桩的利用率,既可以让小可可获得收益,也缓解了其他车主的充电焦虑。现在共有n个使用充电桩的申请,编号从0到n-1.小可可将按编号顺序依次处理所有申请,每个申请Qi(0<=i<=n-1)信息包含两个正整数ai和bi。
对于申请Qi小可可有两种处理策略:
(1)接受申请Qi,将获得ai元收益,但必须放弃接下来的bi个申请。
(2)拒绝申请Qi,没有收益,继续处理下一个申请。
请帮助小可可计算出共享充电桩的能获得的最大收益。

输入描述 Input Description

输入共n+1行;
第1行:一个整数n,表示使用充电桩的申请数量;
第2行到第n+1行:每行两个整数ai和bi;
表示接受申请Qi,将获得ai元收益,但必须放弃接下来的bi个申请。

输出描述 Output Description

输出共1行,一个正整数,表示小可可共享充电桩获得的最大收益。

样例输入 Sample Input

4 3 2 5 4 4 4 3 5

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

样例解释:
小可可共收到4个使用充电桩的申请,最佳策略为接受申请0和申请3。
(1)接受申请0,获得3元收益,但接下来的两个申请必须拒绝;
(2)接受申请3,获得三元收益;
总收益为:3元+3元=6元

数据范围:1<=n<=1000000,1<=ai,bi<=100000;
20%数据:1<=n<=20 1<=ai<=500 1<=bi<=10
40%数据:20<=n<=2000 500<=ai<=20000 10<=bi<=100
60%数据:2000<=n<=100000 20000<=ai<=50000 100<=bi<=200
100%数据:100000<=n<=1000000 50000<=ai<=100000 200<=bi<=2500

代码:

#include
using namespace std;
int n,a[1000005],b[1000005],f[1000005];

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i]>>b[i];
	}
	for(int i=n;i>=1;i--){
		f[i]=max(f[i+1],a[i]+f[i+b[i]+1]);
	}
	cout<

你可能感兴趣的:(区赛市赛试题,c++)