zoukankan      html  css  js  c++  java
  • hdu 4502(吉哥系列故事——临时工计划)

    枚举的错误:

    View Code
    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct Node
    {
        int s;//time start
        int e;// end
        int c;//money
    }N[1010];
    bool cmp(Node a,Node b)
    {
        if(a.s<b.s)return true;
        else if(a.s==b.s&&a.c>b.c)return true;
        return false;
    }
    int main()
    {
        int T,m,n;
        int max,mx;
        int js,k;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d %d",&m,&n);
            for(int i=0;i<n;i++)
            scanf("%d %d %d",&N[i].s,&N[i].e,&N[i].c);
            sort(N,N+n,cmp);
            //for(int i=0;i<n;i++)
            //printf("%d ",N[i].s);
            //printf("\n");
            max=0;
            for(int t=0;t<n;t++)
            {
                mx=0;
                k=t;  //当前工作安排
                js=-1;//当前的工作结束日
                //for(int k=t+1;N[k].e<=m;k++)
                while(k<n)
                {
                   if(js<N[k].s&&N[k].e<=m)mx+=N[k].c,js=N[k].e;
                   k++;
                }
                //printf("%d\n",mx);
                if(mx>max)max=mx;
            }
    
            printf("%d\n",max);
        }
        return 0;
    }

    测试数据:

    1

    7 3

    1 3 5

    4 6 5

    4 7 10

     正确做法DP:

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int N=110;
    int dp[N];
    struct Node
    {
        int s;//start
        int e;//end
        int c;//cost
    } node[1010];
    bool cmp(Node a,Node b)
    {
        if(a.e<b.e)return true;
        return false;
    }
    int main()
    {
        int _case,m,n;
        scanf("%d",&_case);
        while(_case--)
        {
            memset(dp,0,sizeof(dp));
            scanf("%d %d",&m,&n);
            for(int i=0; i<n; i++)
            {
                scanf("%d%d%d",&node[i].s,&node[i].e,&node[i].c);
            }
            sort(node,node+n,cmp);
            for(int i=1;i<=m;i++)
            for(int j=0;j<n;j++)
            {
                if(node[j].e>i)break;
                dp[i]=max(dp[i],dp[node[j].s-1]+node[j].c);
            }
            //for(int j=;j;j++)
            printf("%d\n",dp[m]);
        }
        return 0;
    }
  • 相关阅读:
    CSS 定位position
    new Date(time).getTime()在ios返回NaN
    babel.js 文件 browser.min.js
    export 和 export default 的区别
    第一个webpack例子demo1
    Kafka源码解析与实战
    Redis实战
    RabbitMQ实战
    Spring源码理解
    Java并发编程实践
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3037603.html
Copyright © 2011-2022 走看看