cjq 题解分享 · 2025/4/8
充电 - 题解
``` #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
软糖心动ok6cl 题解分享 · 2025/5/7
充电 - 题解
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
yayuqwq 题解分享 · 2024/4/8
充电 - 题解
``` 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