• 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;
    }
  • 相关阅读:
    sass环境搭建之node-sass,ruby
    对于模块加载:ES6、CommonJS、AMD、CMD的区别
    sass变量的作用域
    sass中的占位符%,@extend,@mixin(@include)的编译区别和使用场景
    遇到的问题
    全局配置
    组件或者dom的特殊属性
    全局API
    CentO7安装zookeeper并设置开机自启动
    MyBatis中TypeHandler的使用
  • 原文地址:https://www.cnblogs.com/XDJjy/p/3037603.html
Copyright © 2020-2023  润新知