KDBC——9294详解

题目传送门
合肥市第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


写完前三题想对出题人说:
在这里插入图片描述
搞这么简单,分数线得多高
还没看最后一题的我:
在这里插入图片描述
不敢写了家人们,害怕爆掉(最后雀实爆了
出题人:
(没想到吧哈哈哈哈哈)
在这里插入图片描述


这题我用的是爆搜,直接爆出银河系(加记忆化能过,已疯别管
但我们还是用老朋友dp
后面的收益完全取自于前面的选择
所以我们毅然决然选择逆推内循环
但,天生反骨的我又怎会给你们dp的代码
我当然要重蹈覆辙
在我的代码上加记忆化~~

#include<bits/stdc++.h>
using namespace std;
long long n,a[1000005],b[1000005],f[1002505];
long long dfs(int x){
	if(x>n) return 0;
	if(f[x]!=-1) return f[x];
	return f[x]=max(dfs(x+1),dfs(x+b[x]+1)+a[x]);
}
int main(){
	memset(f,-1,sizeof(f));
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
	cout<<dfs(1);
    return 0;
}

在这里插入图片描述


市赛考了320,分数线340
我只想说:
在这里插入图片描述
在这里插入图片描述
yc:kimi_a
(模仿请注明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值