hdu 1051 Wooden Sticks
来源:互联网 发布:为什么一淘比淘宝便宜 编辑:程序博客网 时间:2024/06/05 19:53
题目来源:HDU 1051
简单分析:
有一堆木棍,长度和质量已知,有一台处理这些木棍的机器,这台机器处理木棍时有如下规则:
1、处理第一个木棍时需要1秒
2、正在处理的木棍如果长度和质量都大于等于上一根木棍的长度和质量,则这次处理不耗费时间,否则耗费1秒。
求处理这些木棍的最短时间。
思路:
类似于求最优解的问题,一般来说都于贪心算法有些关联,这道题就是这样。首先把所有的木棍按长度升序(长度相同时再按质量升序)排列,但是这样排列完并不一定满足机器处理时的条件二,即有可能质量不符合上述要求,这样我们就必须多次扫描数组,同时标记已经处理完的木棍。
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>using namespace std;struct wood{ int len; int weight;};bool cmp(wood a,wood b) //排序规则{ if(a.len==b.len) return a.weight<b.weight; else return a.len<b.len;}int main(){ int T; scanf("%d",&T); while(T--) { int n,i,j,ans=0; scanf("%d",&n); wood temp[n]; bool vis[n]; //标记数组 memset(vis,false,sizeof(vis)); for(i=0;i<n;++i) { scanf("%d %d",&temp[i].len,&temp[i].weight); } sort(temp,temp+n,cmp); for(i=0;i<n;++i) //多次扫描 { if(!vis[i]) { int curWeight=temp[i].weight; vis[i]=true; for(j=i+1;j<n;++j) { if(temp[j].weight>=curWeight && !vis[j]) { vis[j]=true; curWeight=temp[j].weight; } } ans++; } } printf("%d\n",ans); } return 0;}
ps:贪心算法的代码实现起来比较简单,但是如何想到最优策略,并且证明这是最优策略,这才是贪心算法的难度所在。
0 0
- hdu-1051 wooden sticks
- hdu 1051 Wooden Sticks
- HDU 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- HDU 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- HDU 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- HDU 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- hdu 1051 Wooden Sticks
- HDU 1051 Wooden Sticks
- HDU 1051:Wooden Sticks
- 讯飞语音 20006 错误,已解决
- python操作Elasticsearch
- Spark framework to mysql
- 初识redis——mac下搭建redis环境
- 使用下拉列表框
- hdu 1051 Wooden Sticks
- ubuntu安装QT5.7
- 史上最详细的虚拟机VMware12安装Windows7教程
- Java实现验证码验证功能
- 关于 android.support.v7.widget.ListPopupWindow 在5.0 以上设备显示时上下出现黑边的解决办法。
- AngularJS实际项目应用--ui-router
- C++抽象编程——面向对象(6)——设计新的类(1)
- 关于linux文件挂载(一)
- ping++调微信支付页面调不起来,怎么入手-