算法第四章作业

  1. 你对贪心算法的理解
    1. 这算法也太简单有趣了。
    2. 就是贪心策略不好确定,很可能不对。
    3. 要回举反例,贪心策略要优化。
  2. 请选择一道作业题目说明你的算法满足贪心选择性
    1. 选择 “ 4-2 删数问题 
    2. 代码:
       1 #include <iostream>
       2 using namespace std;
       3 #include <cstring>
       4 #include <algorithm>
       5 bool cmp(int x,int y)
       6 {
       7     return x>y;
       8 }
       9 int main()
      10 {
      11     string s;
      12     int k;
      13     cin >> s >> k;
      14 
      15     while(k--)
      16     {
      17         for(int i=0;i<s.size();i++)
      18         {
      19             if(s[i] > s[i+1])
      20             {
      21                 s.erase(i,1);
      22                 break;
      23             }        
      24         }
      25     }    
      26     while(s.size()>1 && s[0] =='0')
      27         s.erase(0,1);
      28         
      29     cout<<s<<endl;
      30     return 0;
      31 }

       

    3. 说说我贪心心路历程: 

      1. 删掉其中重新排序后的非递增的k个数,结果只过了第一个测试点。(而这题有10个测试点)
      2. 我贪心的不对,我想到如果a=10086,k=2.显然我的贪心错了,亏大了。
      3. 优化贪心策略,想到应该 扫描这个a,k次。若当前的数比后一个数字大,就把当前数给打掉。
      4. 考虑用什么来存储a。 (百度一下),发现string头文件中有个 s.erase(pos,len)的方法,从s[pos]处开始,擦掉包括pos位置的len个字符。譬如s.erase(0,1)擦掉了第一个字符。
      5. 君子也贪,贪之有道。
  3. 请说明在本章学习过程中遇到的问题及结对编程的情况
    1.   没啥问题,搭档挺不错滴
posted @ 2020-11-13 16:27  SPIDERMMMMM  阅读(146)  评论(0编辑  收藏  举报