贪心其实就是一眼你就知道这样做应该才是最优解。常常需要“排序”。
比如说之前的过河问题,用dp做的,贪心也能做到。
懂了一道区间覆盖问题的贪心:https://blog.youkuaiyun.com/sinat_37848482/article/details/65631074
看了一篇有收获的讲解:https://blog.youkuaiyun.com/qq_32400847/article/details/51336300
例题插花:
思路:
其实就是最开始放在最右边的,也应该移到理想状态的最右边,这样步数最少。以此类推。
我的AC代码:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
char a[30001];
int main()
{
int n;
cin>>n;
scanf("%s",a); //注意起始下标为0
int pos=n-1; //初始时最右边的那个1的下标值
int sum=0;
for(int i=2*n-1;i>=pos;i--)
{
if(a[i]=='1')
{
sum+=(i-pos);
pos--;
}
}
cout<<sum;
return 0;
}