贪心算法(c++)

概念

题目

多机调度问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n,m;
int a[1010],b[1010];

bool cmp(int,int);
int main()
{
	
	int kk;
	cin>>kk;
	while(kk--)
	{
		cin>>n>>m;
		for(int i = 1;i<=n;i++)
		{
			cin>>a[i];
		}
		sort(a+1,a+n+1,cmp);
		int sum = 0;
		b[1010] = {0};
		for(int i = 1;i<=n;i++)
		{
			int mi = 999999999,mii;
			for(int j = 1;j<=m;j++)
			{
				if(b[j]<mi) mi = b[j],mii = j;
			}
			b[mii] += a[i];
		}
		int ma = -999999999;
		for(int i = 1;i<=m;i++)
		{
			ma = max(ma,b[i]);
		}
		cout<<ma<<endl;
	}
	
	
	return 0;
}
bool cmp(int xx,int yy)
{
	return xx>yy;
}

排队打水问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n,m;
int a[1010],b[1010];


int main()
{
	
	cin>>n>>m;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i];
	}
	sort(a+1,a+n+1);
	int sum = 0;
	for(int i = 1;i<=n;i++)
	{
		int mi = 999999999,mii;
		for(int j = 1;j<=m;j++)
		{
			if(b[j]<mi) mi = b[j],mii = j;
		}
		b[mii] += a[i];
		sum += b[mii];
	}
	cout<<sum;
	
	return 0;
}

找零钱问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n;
int a[10] = {0,1000,500,200,100,50,20,10,5,1};
int cnt;


int main()
{
	float nn;
	cin>>nn;
	n = nn*10;
	for(int i = 1;i<10;i++)
	{
		int x = n/a[i];
		cnt += x;
		cout<<a[i]*1.0/10<<":"<<x<<endl;
		n = n%a[i];
	}
	cout<<cnt;
	
	return 0;
}

活动选择问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
struct node
{
	int x,y,v;
	node(){};
	node(int aa,int bb,int cc)
	{
		x = aa;
		y = bb;
		v = cc;
	}
};

int n;
node a[10010];
node b[10010];
int lb;
int cnt;

int main()
{
	
	cin>>n;
	for(int i = 1;i<=n;i++)
	{
		cin>>a[i].x>>a[i].y;
		a[i].v = i;
	}
	for(int i = 1;i<=n-1;i++)
	{
		for(int j = 1;j<=n-1-i;j++)
		{
			if(a[j].y>a[j+1].y)
			{
				swap(a[j],a[j+1]);
			}
		}
	}
	
	b[++lb] = {a[1].x,a[1].y,a[1].v};
	cnt = 1;
	for(int i = 2;i<=n;i++)
	{
		if(a[i].x>=b[lb].y)
		{
			b[++lb] = {a[i].x,a[i].y,a[i].v};
			cnt++;
		}
	}
	cout<<cnt<<endl;
	for(int i = 1;i<=lb;i++)
	{
		cout<<b[i].v<<" ";
	}
	return 0;
}

可分割背包问题

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int n,m;
float w[10010],v[10010];
float x[10010];


int main()
{
	
	int ttt;
	cin>>ttt;
	while(ttt--)
	{
		cin>>m>>n;
		for(int i = 1;i<=n;i++)
		{
			cin>>w[i]>>v[i];
			x[i] = v[i]/w[i];
		}
		for(int i = 1;i<=n-1;i++)
		{
			for(int j = 1;j<=n-1-i;j++)
			{
				if(x[j]<x[j+1])
				{
					swap(x[j],x[j+1]);
					swap(w[j],w[j+1]);
					swap(v[j],v[j+1]);
				}
			}
		}
		float sum = 0;
		for(int i = 1;i<=n;i++)
		{
			if(m==0) break;
			if(m>=w[i]) m -= w[i],sum += v[i];
			else
			{
				sum += x[i]*m;
				m = 0;
			}
		}
		cout<<fixed<<setprecision(2)<<sum<<endl;
	}
	
	
	return 0;
}
相关推荐
努力的章鱼bro1 小时前
操作系统-FileSystem
c++·操作系统·risc-v·filesystem
96771 小时前
cURL curl
c++
一匹电信狗1 小时前
【Linux我做主】进程程序替换和exec函数族
linux·运维·服务器·c++·ubuntu·小程序·开源
会编程的土豆2 小时前
【数据结构与算法】二叉树从建立开始
数据结构·c++·算法
:mnong2 小时前
Superpowers 项目设计分析
java·c语言·c++·python·c#·php·skills
信奥胡老师3 小时前
P1255 数楼梯
开发语言·数据结构·c++·学习·算法
A.A呐3 小时前
【C++第二十一章】set与map封装
开发语言·c++
96773 小时前
C++多线程2 如何优雅地锁门 (lock_guard) 多线程里的锁的种类
java·开发语言·c++
dddddppppp1234 小时前
mfc实现的贪吃蛇游戏
c++·游戏·mfc
kyle~4 小时前
ROS2 --- WaitSet(等待集) 等待实体就绪,管理执行回调函数
大数据·c++·机器人·ros2