贪心入门

最近看了看贪心,今天更新几道贪心的入门题目
洛谷 1223 排队接水
一道入门的贪心题,了解贪心思想。

//按照贪心的思想将用时少的人先排队即可实现整体用时最少。
#include 

using namespace std;
struct node{
     double time;int num;}a[1001];
int cmp(const struct node &a,const struct node &b){
     //结构体排序!
if(a.time!=b.time)return a.time<b.time;
return a.num<b.num;
}
int main()
{
        int n;
    double sum=0.0;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
     
        scanf("%lf",&a[i].time);
        a[i].num=i;
       }
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++){
     
        sum+=a[i].time*(n-i);
    }
    for(int i=1;i<=n;i++)
        printf("%d ",a[i].num);
        printf("\n%.2f",sum/n);
       return 0;
}

再来一道!!
洛谷 3817 小A的糖果

#include 
//需要注意数据范围,题目给的数据较大,用int会爆!
using namespace std;
long long box[100001];
int main()
{
        unsigned long long n,x,sum=0;
    scanf("%lld %lld",&n,&x);
    for(int i=0;i<n;i++)
        scanf("%lld",&box[i]);
    for(int i=0;i<n-1;i++)
    {
     
        if(box[i]+box[i+1]>x){
     
            int d=box[i+1]+box[i]-x;
            if(box[i+1]-d>0)box[i+1]-=d;//贪心思想
            else box[i+1]=0;//注意盒子的糖果不能拿空!
            sum+=d;}
        }
        printf("%lld\n",sum);

       return 0;
}

洛谷 1478
再来一道水题

#include 

using namespace std;

struct node{
     
int m,n;
}a[5005];
int cmp(struct node a,struct node b){
     //一样的结构体排序。
if(a.n!=b.n)return a.n<b.n;
return a.m<b.m;
}
int main()
{
           ios::sync_with_stdio(0);
    int x,y,s,k,l;
    int sum=0;
    cin>>k>>s>>x>>y;
    for(int i=0;i<k;i++)
        cin>>a[i].m>>a[i].n;
        sort(a,a+k,cmp);//贪心
        for(int i=0;i<k&&s>0;i++){
     
            if(x+y>=a[i].m&&s>=a[i].n){
     
            s-=a[i].n;
            sum++;
            }}
      cout<<sum;
    return 0;
}

你可能感兴趣的:(贪心算法,icpc,acm竞赛)