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
    */
    
  • 相关阅读:
    go第二天
    go第一天
    engish
    english
    git 生成公钥
    tp5 验证码
    css处理文本折行截断
    数组对象总结(牢记)
    全局css样式
    Flexbox 弹性盒子布局
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934463.html
Copyright © 2011-2022 走看看