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

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

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

将项目按结束时间排序,

 

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

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

 

题目1499:项目安排——背包
#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\n",dp[n]);

    }

    return 0;

}
View Code

 

你可能感兴趣的:(项目)