3 条题解

  • 0
    @ 2025-5-7 13:08:37

    #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;
    

    }

    信息

    ID
    127
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    664
    已通过
    137
    上传者