博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NYOJ-236 心急的C小加
阅读量:6111 次
发布时间:2019-06-21

本文共 2445 字,大约阅读时间需要 8 分钟。

心急的C小加

时间限制:
1000 ms  |           内存限制:
65535 KB
难度:
4
 
描述

C小加有一些木棒,它们的长度和质量都已经知道,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。因为急着去约会,C小加想在最短的时间内把木棒处理完,你能告诉他应该怎样做吗?

 
输入
第一行是一个整数T(1<T<1500),表示输入数据一共有T组。 每组测试数据的第一行是一个整数N(1<=N<=5000),表示有N个木棒。接下来的一行分别输入N个木棒的L,W(0 < L ,W <= 10000),用一个空格隔开,分别表示木棒的长度和质量。
输出
处理这些木棒的最短时间。
样例输入
3 5 4 9 5 2 2 1 3 5 1 4 3 2 2 1 1 2 2 3 1 3 2 2 3 1
样例输出
213
1 /*  2 代码一: ----TLE  3 思路: 动态规划---- 先按照长度排序,然后根据重量求最长递减子序列  4 即为所求,可惜超时了  5   6 #include 
7 #include
8 #include
9 using namespace std; 10 11 struct stick 12 { 13 int len; 14 int weight; 15 }a[5001]; 16 17 bool cmp(stick p, stick q) 18 { 19 if(p.len == q.len) 20 return p.weight < q.weight; 21 else 22 return p.len < q.len; 23 } 24 25 int solve(int n) 26 { 27 int dp[5001]; 28 int max = -1; 29 for(int i = 0; i < n; ++i) 30 { 31 dp[i] = 1; 32 for(int j = 0; j < i ;++j) 33 { 34 if(a[i].weight < a[j].weight && dp[j] + 1 > dp[i]) 35 dp[i] = dp[j] + 1; 36 if(dp[i] > max) 37 max = dp[i]; 38 } 39 } 40 return max; 41 } 42 43 int main() 44 { 45 int T, n; 46 scanf("%d", &T); 47 while(T--) 48 { 49 scanf("%d", &n); 50 for(int i = 0; i < n; ++i) 51 scanf("%d%d", &a[i].len, &a[i].weight); 52 sort(a, a + n, cmp); 53 printf("%d\n", solve(n)); 54 } 55 return 0; 56 } 57 58 */ 59 代码二:----AC 60 思路:先排序,然后根据贪心原则依次过滤 61 #include
62 #include
63 #include
64 using namespace std; 65 66 struct stick 67 { 68 int len; 69 int weight; 70 }a[5001]; 71 72 bool cmp(stick p, stick q) 73 { 74 if(p.len == q.len) 75 return p.weight < q.weight; 76 else 77 return p.len < q.len; 78 } 79 80 int solve(int n) 81 { 82 int t, cnt = 0; 83 for(int i = 0; i < n; ++i) 84 { 85 if(a[i].weight) 86 { 87 ++cnt; 88 t = a[i].weight; 89 a[i].weight = 0; 90 for(int j = i + 1; j < n ;++j) 91 { 92 if(a[j].weight >= t) 93 { 94 t = a[j].weight; 95 a[j].weight = 0; 96 } 97 } 98 } 99 }100 return cnt;101 }102 103 int main()104 {105 int T, n;106 scanf("%d", &T);107 while(T--)108 {109 scanf("%d", &n);110 for(int i = 0; i < n; ++i)111 scanf("%d%d", &a[i].len, &a[i].weight);112 sort(a, a + n, cmp);113 printf("%d\n", solve(n));114 }115 return 0;116 }

 

转载地址:http://xacka.baihongyu.com/

你可能感兴趣的文章
云时代架构阅读笔记之四
查看>>
WEB请求处理一:浏览器请求发起处理
查看>>
Lua学习笔记(8): 元表
查看>>
PHP经典算法题
查看>>
LeetCode 404 Sum of Left Leaves
查看>>
醋泡大蒜有什么功效
查看>>
hdu 5115(2014北京—dp)
查看>>
数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)...
查看>>
PHP读取日志里数据方法理解
查看>>
第五十七篇、AVAssetReader和AVAssetWrite 对视频进行编码
查看>>
Vivado增量式编译
查看>>
一个很好的幻灯片效果的jquery插件--kinMaxShow
查看>>
微信支付签名配置正确,但返回-1,调不出支付界面(有的手机能调起,有的不能)...
查看>>
第二周例行报告
查看>>
Spring学习(16)--- 基于Java类的配置Bean 之 基于泛型的自动装配(spring4新增)...
查看>>
实验八 sqlite数据库操作
查看>>
四种简单的排序算法(转)
查看>>
Quartz2D之着色器使用初步
查看>>
多线程条件
查看>>
Git [remote rejected] xxxx->xxxx <no such ref>修复了推送分支的错误
查看>>