NEUOJ 1211 MJF wants to work (与区间相关的贪心)

来源:互联网 发布:英雄联盟知乎 编辑:程序博客网 时间:2024/06/05 09:52

题目链接

2017ICPCECIC H题

题目大意

分析

代码

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>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;}
原创粉丝点击