题解分享
题解分享简介
充电 - 题解
```
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int inf=1e7+10;
int n,dp[inf],a[inf],b[inf];
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i]>>b[i];
for(int i=n;i>=1;i--){
dp[i]=max(dp[i+1],dp[i+b[i]+1]+a[i]);
//cout<<i<<":"<<dp[i]<<endl;
}
cout<<dp[1];
return 0;
}
```
查看全文
0
0
0
5
充电 - 题解
include
using namespace std;
int n;//n个申请
int get[100005];//接受的收益
int giveup[100005];//需要放弃的个数
int dp[100005];//到第i个申请时,此时可收益的最大值
int main()
{
cin>>n;
```
for(int i=1;i<=n;i++){
cin>>get[i];
cin>>giveup[i];
}
dp[1]=get[1];
for(int i=1;i<=n;i++){
dp[i]=max(dp[i],dp[i-1]);
if(i+giveup[i]<=n)//接受第i+giveup个,且不越界
{
int rec=dp[i]+get[i];//新的dp[i+giveup[i]],用rec记录
dp[i+giveup[i]]=max(dp[i+giveup[i]],rec);
}
}
cout<<dp[n];
return 0;
```
}
查看全文
0
0
0
4
充电 - 题解
```
n = int(input())
ls = [0]*(n+5)
for i in range(n):
a,b = map(int,input().split())
ls[i] = [a,b]
dp = [0]*(n+5)
for i in range(n-1,-1,-1):
dp[i] = dp[i+1]
c = i + ls[i][1]+1
dp[i] = max(dp[i],ls[i][0]+(dp[c] if c<n else 0 ))
print(max(dp))
```
查看全文
0
0
0
1



