贪心策略(分糖果、移除数字、区间覆盖问题)

贪心算法是指:在对问题求解的时候,总是做出在当前看来最好的选择。也就是说,找出局部最优解。通过求局部最优解得到最终问题的答案。贪心策略的选择必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关
贪心问题的解决步骤:
(1)当我们看到这些问题,首先联想到贪心算法:针对一组数据,我们定义了限制值和期望值,希望从中选择几个数据,在满足限制值的情况下,期望值最大。
(2)尝试看这个问题能否用贪心问题解决:每次选择当前情况下,在对限制值同等贡献量的情况下,对期望值贡献最大的数据。
(3)举例验证贪心算法产生的结果是不是最优的。

#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace  std;
int getMax(vector<int> can, vector<int> child)
{
	sort(can.begin(), can.end());
	sort(child.begin(), child.end());
	int count = 0;
	int j = 0;
	for (int i = 0; i < child.size(); i++)
	{
		while (j < can.size())
		{
			if (child[i] <= can[j])
			{
				count++;
				j++;
				break;
			}
			j++;
		}
	}
	return count;
}


//从左向右扫描,找出连续的非严格递增串,删除最后一个
string removeKdigits(std::string num, int k)
	{
		for (int i = 0; i < k; i++)
		{
			int index = -1;
			for (int j = 0; j < num.size()- 1; j++)
			{
				if (num[j] > num[j + 1])
	
				{
					index = j;
					break;
				}
			}
			if (index >-1)
			{
				num.erase(index,1);
			}
			else
			{
				num.erase(num.size() - 1, 1);
			}
			cout << num<<endl;
		}
		return num;
	}

int main()
{

	string s = "";
	cin >> s;
	cout << removeKdigits(s,3);
	system("pause");
	return 0;
}
class times
{
public:
    int star;
    int end;
    times(int star,int  end)
    {
        this->star = star;
        this->end = end;
    }
};

bool operator<(times t1,times t2)
{
    
    return t1.end < t2.end;
}
 int getmax(vector<times> v)
{
    if (v.size() ==0)
    {
        return 0;
    }
    int count = 1;
    sort(v.begin(), v.end());
    
    
    for (int i =0 ; i < 6; i++)
    {
        cout << v[i].star <<"---"<< v[i].end<<" "<<endl;
    }
    
    int j = 0;
    for (int i =0; i < v.size() ; i++)
    {
        
    
        while ( j < v.size())
        {
            if (v[i].end<=v[j].star)
            {
                cout << i<< "-----"<< j<<endl;
                count++;
                i = j-1;//寻找到当前节点
                j++;
                break;
            }
            j++;
        }
        

    }
    
    
    return count ;
    
}


/*
 1 5
 2 4
 3 5
 5 9
 6 8
 8 10
 */

猜你喜欢

转载自blog.csdn.net/weixin_39804483/article/details/89025510