雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

Posted on 2013-10-03 22:06  huhuuu  阅读(243)  评论(0编辑  收藏  举报

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\n",dp[n]);
    }
    return 0;
}
View Code