贪心算法(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;
}
相关推荐
智者知已应修善业7 小时前
【51单片机89C51及74LS273、74LS244组成】2022-5-28
c++·经验分享·笔记·算法·51单片机
Byron Loong10 小时前
【c++】为什么有了dll和.h,还需要包含lib
java·开发语言·c++
坚果派·白晓明10 小时前
【鸿蒙PC三方库移植适配框架解读系列】第一篇:Lycium C/C++ 三方库适配 — 概述与环境配置
c语言·开发语言·c++·harmonyos·开源鸿蒙·三方库·c/c++三方库
咩咦11 小时前
C++学习笔记02:cin 和 cout 输入输出
c++·学习笔记·cin·输入输出·cout
咩咦11 小时前
C++学习笔记05:引用和常引用
c++·学习笔记·引用·const·常引用
香蕉鼠片11 小时前
算法过程中不会的
开发语言·c++
阿旭超级学得完11 小时前
C++11包装器(function和bind)
java·开发语言·c++·算法·哈希算法·散列表
li星野11 小时前
位运算 & 数学 & 高频进阶九题通关(Python + C++)
c++·python·学习·算法
磊 子12 小时前
多态类原理+四种类型转换+异常处理
开发语言·c++·算法
王老师青少年编程12 小时前
csp信奥赛C++高频考点专项训练之字符串 --【回文字符串】:回文拼接
c++·字符串·csp·高频考点·信奥赛·字符串回文·回文拼接