zoukankan      html  css  js  c++  java
  • Dp Milking Time POJ

    题目大意: 一头奶牛产奶的时间是1-n,农夫有m个时间段可以去收集奶,每次收了奶之后奶牛要休息R时间,求农夫可以收的奶的最大值。

    每次自己要想蛮久都想不出怎么去推,还是做的题太少啦。。。一看题解 知道dp[i]表示区间[1,i]所能得到牛奶的最大值后,一下就写出来啦。

    思路类似于求最长递增子序列。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxn 1005
    using namespace std;
    typedef struct
    {
        int x1,x2,c;
    }P;
    P a[maxn];
    int dp[maxn];
    int n,m,r;
    int cmp(P c,P d)
    {
        return c.x1<d.x1;
    }
    int main()
    {
        scanf("%d%d%d",&n,&m,&r);
        for(int i=1;i<=m;i++)
          scanf("%d%d%d",&a[i].x1,&a[i].x2,&a[i].c);
        sort(a+1,a+1+m,cmp);
        dp[1]=a[1].c;
        int ans=dp[1];
        for(int i=2;i<=m;i++)
        {
            int ma=0;
            for(int j=1;j<i;j++)
                if(a[i].x1>=a[j].x2+r&&dp[j]>ma)
                   ma=dp[j];
            dp[i]=ma+a[i].c;
            ans=max(ans,dp[i]);
        }
        printf("%d
    ",ans);
        return 0;
    }
    View Code

    最长递增子序列

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define maxn 1005
    using namespace std;
    int a[maxn],dp[maxn];
    int main()
    {
        int n;
       while(~scanf("%d",&n))
       {
    
        for(int i=1;i<=n;i++)
          scanf("%d",&a[i]);
        for(int i=1;i<=n;i++)
        {
            dp[i]=1;
            for(int j=1;j<i;j++)
              if(a[i]>a[j])
                dp[i]=max(dp[i],dp[j]+1);
        }
        printf("%d
    ",*max_element(dp+1,dp+1+n));
       }
        return 0;
    }
    View Code
  • 相关阅读:
    Pandas
    numpy常用举例
    scikit-learn 应用
    numpy基本函数
    pytong下安装安装SK-Learn
    python 在机器学习中应用函数
    决策树实战
    KNN 实战
    Java中的stream流的概念解析
    Struts2为什么要使用OGNL
  • 原文地址:https://www.cnblogs.com/Twsc/p/7354394.html
Copyright © 2011-2022 走看看