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
    */
    
  • 相关阅读:
    迅雷亲历面试经过,笔试+上机+面试(完整)
    Flash Player安全高级攻略
    EBS查看Report程式所挂在的. 报表名. 组. 责任
    ORACLE常用后台表查询
    Ap_Aging_Report SQL月底结账使用
    2012年最新会计科目表
    如何用sql实现AP_payments中应付余额与GL_balance对应科目余额相同
    SQL应收帐款帐龄报表(AR_Aging_Reporting)
    Navigator: Disable Multiform
    GL: 访问权限集
  • 原文地址:https://www.cnblogs.com/keyboarder-zsq/p/5934463.html
Copyright © 2011-2022 走看看