题目1499:项目安排——背包

http://ac.jobdu.com/problem.php?pid=1499

给N个有开始结束的且有价格的项目 安排项目的顺序 使总价值最大

将项目按结束时间排序,

01背包 ,dp[i] 表示到第i个项目,最大的价值是多少

j从后往前遍历,更新符合 条件的的dp[i] 

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;

struct data{
    int ll,rr;
    int v;
}s[10999];
int dp[10999];
int cmp(data x,data y){
    return x.rr<y.rr;
}

int main()
{
    int n;
    while(scanf("%d",&n)!=EOF){
        int i,j;
        for(i=1;i<=n;i++){
            scanf("%d%d%d",&s[i].ll,&s[i].rr,&s[i].v);
            dp[i]=0;
        }dp[0]=0;
        sort(&s[1],&s[1+n],cmp);


        dp[1]=s[1].v;
        for(i=2;i<=n;i++){
            for(j=i-1;j>=1;j--){
                if(s[j].rr<=s[i].ll)break;
            }
            dp[i]=dp[j]+s[i].v;
            dp[i]=max(dp[i],dp[i-1]);
        }
        printf("%d
",dp[n]);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/huhuuu/p/3350673.html