题目链接
2017ICPCECIC H题
题目大意
分析
代码
const int INF=0x3F3F3F3F;
const int MAXN=200005;
using namespace std;
struct Dot
{
int x,flag,time,money;
}a[MAXN*2];
bool cmp(struct Dot a,struct Dot b)
{
return (a.x<b.x||((a.x==b.x)&&(!a.flag)&&(b.flag)));
}
int main()
{
int dp[MAXN],n,m,i,l,r,c,ans;
while (scanf("%d%d",&n,&m)!=EOF)
{
ans=INF;
for (i=1;i<=n;i++)
{
scanf("%d%d%d",&l,&r,&c);
a[2*i-1].x=l;
a[2*i-1].flag=0;
a[2*i-1].time=r-l+1;
a[2*i-1].money=c;
a[2*i].x=r;
a[2*i].flag=1;
a[2*i].time=r-l+1;
a[2*i].money=c;
}
sort(a+1,a+2*n+1,cmp);
memset(dp,INF,sizeof(dp));
for (i=1;i<=2*n;i++)
{
if (!a[i].flag)
ans=min(ans,dp[m-a[i].money]+a[i].time);
else
dp[a[i].money]=min(dp[a[i].money],a[i].time);
}
if (ans==INF)
printf("oh no!\n");
else
printf("%d\n",ans);
}
return 0;
}