算法设计与分析(锐格之贪心算法)

Posted 晨沉宸辰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法设计与分析(锐格之贪心算法)相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

#include <iostream>
using namespace std;
int main()
{
    int n,k;
    cin>>n>>k;
    int i;
    int a[101];
    for(i=0;i<k+1;i++)
        cin>>a[i];
    int sum=0;
    int flag=0;
    for(i=0;i<k+1;i++)
    {
        sum+=a[i];
        if(sum>=n)
        {
            sum=a[i];
            flag++;
            //cout<<i<<" ";
        }
    }
    //cout<<endl;
    cout<<flag<<endl;
}

在这里插入图片描述

#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x,y;
};
bool cmp(node a,node b)
{
    if(a.y!=b.y)
        return a.y<b.y;
    else
        return a.x>b.x;
}//按区间大小排序,将小区间放在前面,先排y,y相同的情况下x越大区间越小
int main()
{
    int n;
    cin>>n;
    int i;
    node a[101];
    int tempx,tempy;
    for(i=0;i<n;i++)
    {
        cin>>tempx>>tempy;
        a[i].x=min(tempx,tempy);
        a[i].y=max(tempx,tempy);
    }
    sort(a,a+n,cmp);
    //for(i=0;i<n;i++)
        //cout<<a[i].x<<" "<<a[i].y<<endl;
    int temp=a[0].y;
    int flag=1;//记录不相交的次数,设初值为1的原因是当只有一个集合的时候肯定不相交。
    for(i=1;i<n;i++)
    {
        if(temp<=a[i].x)
        {
            flag++;
            temp=a[i].y;
        }
    }
    cout<<flag<<endl;//答案应该输出的是剩下的闭区间数
}

在这里插入图片描述

#include <iostream>
#include <algorithm>
#include <cstdio>
#define MAX 101
using namespace std;
int main()
{
    int n;
    float num;
    cin>>n;
    num=n/1.0;
    int a[MAX];
    int sum[MAX];
    int i;
    for(i=0; i<n; i++)
    {
        cin>>a[i];
    }
    sort(a,a+n);
    for(i=0; i<n; i++)
        sum[i]=0;
    int j;
    int ans=0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<=i; j++)
        {
            sum[i]+=a[j];
        }
        ans+=sum[i];
    }
    printf("%.2f",ans/num);
}

以上是关于算法设计与分析(锐格之贪心算法)的主要内容,如果未能解决你的问题,请参考以下文章

算法设计与分析贪心算法--活动安排问题

算法设计与分析报告

016-kruskal算法-贪心-《算法设计技巧与分析》M.H.A学习笔记

算法设计与分析

018-Huffman树-贪心-《算法设计技巧与分析》M.H.A学习笔记

算法设计分析之贪心算法