0 1背包问题
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
struct project{
int start;
int end;
int weight;
}pro[10001];
int comp(const void* a1,const void *b1)
{
struct project* a=(struct project*) a1;
struct project* b=(struct project*) b1;
return a->end - b->end;
}
int dp[10001];
int main(){
int n;
while(cin>>n)
{
int i=0;
for(i=0;i<n;i++)
{
cin>>pro[i].start>>pro[i].end>>pro[i].weight;
dp[i]=0;
}
qsort(pro,n,sizeof(project),comp);
dp[0]=pro[0].weight;//设置第一个DP为第一个项目的权值
//从第二个项目开始动态规划数组,从后向前查找第一个可以插入的位置
for(i=1;i<n;i++)
{
int j=0;
for(j=i-1;j>=0;j--)
{
if(pro[j].end<=pro[i].start)
break;
}
//如果为-1说明找不到可以插入的位置,那么这里就放置当前项目
//否则在查询出来的位置中插入这个项目
if(j!=-1)
{
dp[i]=dp[j]+pro[i].weight;
}else{
dp[i]=pro[i].weight;
}
//如果插入这个项目后还没有前一个大,则不插入这个项目
if(dp[i]<dp[i-1])
dp[i]=dp[i-1];
}
//某位最大值
cout<<dp[n-1]<<endl;
}
return 0;
}