返回题解分享
讨论 / 题解分享/ 帖子详情

充电 - 题解

#include <iostream>

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 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!