/*
首先离散化,按结束时间排序
然后背包
*/
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
struct node
{
__int64 s,t,w;
}edge[100010];
__int64 *p[100010];
__int64 dp[200020];
int vis[200020];
bool cmp1(__int64 *a,__int64 *b)
{
return *a<*b;
}
bool cmp2(node a,node b)
{
return a.t<b.t;
}
__int64 max(__int64 x,__int64 y)
{
if(x<y) return y;
return x;
}
int main()
{
int n,top,i,ii;
while(scanf("%d",&n)!=EOF)
{
for(top=0,i=1;i<=n;i++)
{
scanf("%I64d%I64d%I64d",&edge[i].s,&edge[i].t,&edge[i].w);
p[top++]=&edge[i].s;
p[top++]=&edge[i].t;
}
sort(p,p+top,cmp1);
// printf("*****\n");
// for(i=0;i<top;i++)
// printf("%d ",*p[i]);
//
// printf("\n*****\n");
ii=0;
for(i=0;i<top;i++)
{
while(i<top-1 && *p[i]==*p[i+1])
{
*p[i++]=ii;
continue;
}
*p[i]=ii;
ii++;
}
// printf("\n++++\n");
sort(edge+1,edge+1+n,cmp2);
// for(i=1;i<=n;i++)
// printf("%d %d %d\n",edge[i].s,edge[i].t,edge[i].w);
memset(dp,0,sizeof(dp));
memset(vis,0,sizeof(vis));
vis[0]=1;
__int64 mm=0;
/*
for(i=1;i<=n;i++)
{
int j=edge[i].s;
while(!vis[j])
j--;
dp[edge[i].t]=max(dp[j]+edge[i].w,mm);//dp[edge[i].t 注意: 这里是前面的最大值
vis[edge[i].t]=1;
mm=max(dp[edge[i].t],mm);
}
*/
for(i=1;i<)
printf("%I64d\n",mm);
}
return 0;
}
/*
3
1 2 1
2 3 1
3 4 1
3
1 3 1
2 4 1
3 5 1
*/
Interview Arrangement
最新推荐文章于 2019-03-19 20:50:59 发布