题解 | #毕业bg#

毕业bg

http://www.nowcoder.com/practice/a3a99a0658a44cb1a37ddf5c164e21a6

总体采用动态规划思想,不过在规划之前,需要按离开时间对每一个bg进行排序,将离开时间早的排在前面。

然后再离开时间到开始时间内进行循环动态规划即可。

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

struct bg{
    int happy;
    int time;
    int leavetime;
    bool operator<(bg next){
        return leavetime < next.leavetime;
    }
};

const int MAXN = 30;
bg arr[MAXN];
int dp[1000];

int main(){
    int n;
    while(cin >> n){
        if(n<0) break;
        int leavetime;
        for(int i=0;i<n;i++)
            cin >> arr[i].happy >> arr[i].time >> arr[i].leavetime;
        memset(dp,0,sizeof(dp));
        sort(arr,arr+n);
        int maxAns = 0;
        
        for(int i=0;i<n;i++){
            for(int currenttime = arr[i].leavetime;currenttime>=arr[i].time;currenttime--){
                dp[currenttime] = max(dp[currenttime-arr[i].time]+arr[i].happy,dp[currenttime]);
                maxAns = max(maxAns,dp[currenttime]);
            }
        }
        cout << maxAns << endl;
        }
    
    return 0;
}
全部评论

相关推荐

无情咸鱼王的秋招日记之薛定谔的Offer:好拒信,偷了,希望有机会用到
点赞 评论 收藏
分享
4 收藏 评论
分享
牛客网
牛客企业服务