贪心算法 problem1008

  1. 1.简明题意  
  2. 就是用一个机器加工木条,知道木条的长度和宽度,机器启动一次需要一分钟,如果一根木条比他上一次木条的长宽都短,就不需要重新启动机器,反之则需要。  
  3. 求最短时间  
  4. 2.解题思路  
  5. 使用动态规划和贪心算法  
  6. 3.感想  
  7. 好难啊  
  8. 4.ac代码  
  9.   
  10.   
  11. #include<iostream>  
  12. #include<cstring>  
  13. #include<algorithm>  
  14. using namespace std;  
  15. struct stick  
  16. {  
  17.     int l;              
  18.     int w;  
  19. }s[5001];  
  20. bool cmp(stick a, stick b)  
  21. {  
  22.     if (a.l == b.l)     return a.w < b.w;  
  23.     else if (a.l < b.l) return true;  
  24.     return false;  
  25. }  
  26. int LIS(int n, stick a[])  
  27. {  
  28.     int b[5001];  
  29.     memset(b, 0, sizeof(b));  
  30.     int i, j, k;  
  31.     b[0] = 1;  
  32.     for (i = 1; i<n; i++)  
  33.     {  
  34.         k = 0;  
  35.         for (j = 0; j<i; j++)  
  36.             if (a[i].w<a[j].w && k<b[j]) k = b[j];  
  37.         b[i] = k + 1;  
  38.     }  
  39.     int max = 0;  
  40.     for (i = 0; i<n; i++)  
  41.         if (b[i]>max) max = b[i];  
  42.     return max;  
  43. }  
  44. int main()  
  45. {  
  46.     int LIS(int n, stick a[]);  
  47.     int n,m;  
  48.     int max = 0;  
  49.     cin >> n;  
  50.     for (int i = 0; i < n; i++)  
  51.     {  
  52.         cin >> m;  
  53.         for (int j = 0; j < m; j++)  
  54.         {  
  55.             cin >> s[j].l >> s[j].w;  
  56.         }  
  57.         sort(s, s + m , cmp);  
  58.         max = LIS(m, s);  
  59.         cout << max << endl;  
  60.     }  
  61.     return 0;  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值