zoukankan      html  css  js  c++  java
  • poj 1065 wooden sticks

    题目大意:

    一些树枝,每个树枝有长度和重量,如果下一次加工的树枝长度和重量都不小于当前树枝,那么下一次加工不消耗,反之,下一次加工消耗为1

    求如何排序才能使加工完这些树枝的消耗最小,求最小消耗

    思路:

    dp+排序

    按照长度从小到大排序,然后看在该序列下,重量有多少个不下降子序列,不下降子序列的个数就是答案。

    求个数的方法,就是先求出一个最长不下降的序列,然后把他们从序列中去掉,再看剩下的序列中,去掉最长的,直到序列空了

    每次去完ans++即可

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<algorithm>
    #include<cstring>
    #include<cstdlib>
    using namespace std;
    int t,n,ans,maxn;
    struct st
    {
        int l,w;
        bool operator < (const st &a) const
        {
            if(l<a.l) return true;
            if(l==a.l&&w<a.w) return true;
            return false;
        }
    }a[5040];
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d",&n);
            for(int i=0;i<n;i++) scanf("%d%d",&a[i].l,&a[i].w);
            sort(a,a+n);ans=0;
            for(int i=0;i<n;i++)
            {
                if(a[i].w!=0)
                {
                    ans++;
                    maxn=a[i].w;a[i].w=0;
                    for(int j=i+1;j<n;j++)
                    {
                        if(a[j].w==0) continue;
                        if(a[j].w>=maxn)
                        {
                            maxn=a[j].w;
                            a[j].w=0;
                        }
                    }
                }
            }
            printf("%d
    ",ans);
        }
    }
    View Code

     poj 1609 同

  • 相关阅读:
    lipo命令
    Eclipse安装ADT插件
    编译vo-aacenc遇到的问题
    双MIC安卓手机录音问题
    天天动听MP3解码器性能提升50%
    Sublime Text 2结合VS2010配置C C++编译
    讯飞语音语义接口测试
    讯飞语音接口注册
    iOS阶段学习第31天笔记(UINavigationBar介绍)
    iOS App上架AppStore 会遇到的坑
  • 原文地址:https://www.cnblogs.com/yyc-jack-0920/p/7221832.html
Copyright © 2011-2022 走看看