zoukankan      html  css  js  c++  java
  • POJ 1065 Wooden Sticks 贪心

    一道贪心题目,题意:有n个木棒,分别不同的长度和不同的重量,一个机器需要处理这些木棒,如果第i+1个木棒的重量和长度都>=第i个处理的木棒,那么将不会耗费时间,否则需要增加一个单位的时间,问最少需要多少时间处理完(包括机器启动的时间)

      思路:我们把木棒按重量从小到大排列,而且相同的重量按长度从小到大排列,然后每次选取合适的木棒加入一个集合,这个集合木棒的顺序是按重量和长度递增的,也就是说这个集合只需要一个单位的时间就可以处理完,我们可以证明是最优的:

    因为我们已经对木棒进行了排序,那么我们每次选取的木棒是对以后放木棒影响最小的那一个,这样我们就会得到最优解。

    #include <iostream>
    #include
    <cstdio>
    #include
    <memory.h>
    #include
    <algorithm>
    using namespace std;

    #define MAXN 10050struct Node{
    int x,y;
    }node[MAXN];
    bool cmp(const Node& a,const Node& b)
    {
    if(a.y == b.y)
    return a.x<b.x;
    return a.y<b.y;
    }

    int main()
    {
    int n,i,j,tt,arr[MAXN],flag,tmp,n_ans;
    scanf(
    "%d",&tt);
    while(tt--)
    {
    scanf(
    "%d",&n);
    for(i = 0;i < n; ++i)
    scanf(
    "%d%d",&node[i].x,&node[i].y);
    memset(arr,
    0,sizeof(arr));
    sort(node,node
    +n,cmp);
    n_ans
    = 0;
    for(i = 0;i < n; ++i)
    {
    flag
    = 0;
    for(j = 0;j <= n_ans; ++j)
    if(node[i].x >= arr[j])
    {
    arr[j]
    = node[i].x;
    flag
    = 1;
    break;
    }
    if(!flag)
    {
    ++n_ans;
    arr[n_ans]
    = node[i].x;
    }
    }
    printf(
    "%d\n",n_ans+1);
    }
    return 0;
    }
  • 相关阅读:
    锤子科技官网:问题整理及注意事项
    springboot中文文档
    Spring Framework 开发参考手册中文(在线HTML)
    .is() 全选复选的判断
    c:forEach用法
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    火狐浏览器下载文件保存文件名的乱码问题
    多线程安全的解决方法
    MySQL的concat以及group_concat的用法
    mysql 将时间转换成时间戳
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1682423.html
Copyright © 2011-2022 走看看