zoukankan      html  css  js  c++  java
  • POJ3616【基础DP】

    //因为同一点结束的时间段会有多个,这里没考虑;
    //无限wa;
    const int N=1e6+7;
    int b[N];
    LL a[N];
    LL dp[N];
    struct asd{
        int s;
        int t;
        LL w;
    };
    asd q[N];
    bool cmp(asd z,asd x)
    {
        if(z.t<x.t)
            return 1;
        return 0;
    }
    int main()
    {
        int n,m,r;
        while(~scanf("%d%d%d",&n,&m,&r))
        {
            int s,t;
            LL w;
            for(int i=0;i<m;i++){
                scanf("%d%d%lld",&s,&t,&w);
                q[i].s=s;
                q[i].t=t;
                q[i].w=w;
            }
            sort(q,q+m,cmp);
            memset(a,0,sizeof(a));
    
            for(int i=0;i<m;i++){
                a[q[i].t]=q[i].w;
                b[q[i].t]=q[i].s;
            }
            memset(dp,0,sizeof(dp));
    
            int x;
            for(int i=1;i<=n;i++)
            {
                x=b[i]-r;
                if(x>=0){
                    dp[i]=max(dp[i-1],dp[x]+a[i]);
                }
                else{
                    dp[i]=max(a[i],dp[i-1]);
                }
            }
           /* for(int i=1;i<=n;i++)
                printf("%lld ",dp[i]);
            puts("");*/
            printf("%lld
    ",dp[n]);
        }
        return 0;
    }
    /*
    12 4 2
    1 2 8
    10 12 19
    3 5 24
    7 10 31
    
    12 4 2
    1 2 8
    10 12 19
    3 6 24
    7 10 31
    */
    

    后面想的是那我for一下前面的,然后找到有那个截止点的数据,然后找一个最优的。后来没有搞成n+m,就理应吃T了一发。
    已AC;

    #include<iostream>
    #include<cstdio>
    #include<math.h>
    #include<queue>
    #include<map>
    #include<stdlib.h>
    #include<string>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    typedef long long LL;
    #define INF 0x3f3f3f3f
    #define PI acos(-1.0)
    
    //因为同一点结束的时间段会有多个,这里没考虑;
    //无限wa;
    const int N=1e6+7;
    int b[N];
    LL a[N];
    LL dp[N];
    struct asd{
        int s;
        int t;
        LL w;
    };
    asd q[N];
    
    bool cmp(asd z,asd x)
    {
        if(z.t<x.t)
            return 1;
        return 0;
    }
    
    int main()
    {
        int n,m,r;
        while(~scanf("%d%d%d",&n,&m,&r))
        {
            int s,t;
            LL w;
            for(int i=0;i<m;i++){
                scanf("%d%d%lld",&s,&t,&w);
                q[i].s=s;
                q[i].t=t;
                q[i].w=w;
            }
            memset(dp,0,sizeof(dp));
            for(int i=0;i<m;i++){
                dp[q[i].t]=max(q[i].w,dp[q[i].t]);
            }
            sort(q,q+m,cmp);
    
            int x;
            int i,j=0;
            for(i=1;i<=n;i++){
                dp[i]=max(dp[i],dp[i-1]);
                for(;j<m;){
                    if(q[j].t==i){
                        x=q[j].s-r;
                        if(x<0) x=0;
                        dp[i]=max(dp[i],dp[x]+q[j].w);
                        j++;
                    }
                    else
                        break;
                }
            }
    
    /*        for(int i=1;i<=n;i++){
                printf("%d ",dp[i]);
            }
            puts("");*/
    
    
            printf("%d
    ",dp[n]);
        }
        return 0;
    }
    
    /*
    12 4 2
    1 2 8
    10 12 19
    3 5 24
    7 10 31
    
    12 4 2
    1 2 8
    10 12 19
    3 6 24
    7 10 31
    */
    
  • 相关阅读:
    c# 改变FileUpload 上传文件大小
    使用ActiveX读取客户端mac地址
    javascript小技巧
    【2012百度之星/资格赛】H:用户请求中的品牌 [后缀数组]
    POJ1012 约瑟夫环问题[双向循环链表+打表技巧]
    北大ACM题分类
    ACM大量习题题库
    POJ1423 计算出n的阶乘的位数大数问题[Stirling公式]
    ACM训练计划(下)
    POJ2080 角度问题[cmath函数]
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934463.html
Copyright © 2011-2022 走看看