• POJ3616


    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int dp[10050];
    struct sa{
        int x,y,sum;
    }p[10050];
    //我觉得结构体的基础知识你得复习下 
    int cmp(const sa a,const sa b){
        if(a.x==b.x) return a.y<b.y;
        return a.x<b.x;
    } 
    //比较函数 
    int main(){
        int n,m,t;
        scanf("%d%d%d",&n,&m,&t);
        //一个整个时间段,一个是 能挤几次,最后一个是要恢复的时间
        for(int i=0;i<m;i++){
            scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].sum);
            //每次挤的时间区间和能挤出的量 
            p[i].y+=t;
            //把延续的时间一加,就当这个时间段都只能做一个了 
        } 
        sort(p,p+m,cmp);
        //这个排序要看上面的cmp,挺值得学习的
        //另外这个排序对于这个题也挺关键的
        for(int i=m-1;i>=0;i--){
            dp[i]=p[i].sum;
            //嗯因为是在外面定义的所以全是零喽
            //至于i的开始我觉得你得去问问你的排序怎么排的 
            for(int j=i+1;j<m;j++)
                if(p[j].x>=p[i].y){
                    dp[i]=max(dp[i],dp[j]+p[i].sum);
                }
            //转印方程还得思考思考
            //类比才是王道,直接类比个地下城的刷图,固定下时间就ok
            //我觉得这转移方程也不好想吖 
        } 
        int maxx=0;
        for(int i=0;i<m;i++)
        maxx=max(maxx,dp[i]);
        cout<<maxx<<endl;
        return 0;
        
    }
  • 相关阅读:
    暑假自学(19)
    暑假自学(18)
    暑假自学(17)
    暑假自学(16)
    暑假自学(15)
    rsync简介
    10.Go语言-面向对象简单了解
    dp 数字三角形
    P1359租用游艇(dp+dfs)
    油田问题 bfs
  • 原文地址:https://www.cnblogs.com/beiyueya/p/12861849.html
Copyright © 2020-2023  润新知