贪心算法(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;
}
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
weilx12342 天前
C++笔记-文件IO-<fcntl.h>
c++
Smileyqp沛沛2 天前
前端?C++ ?较大差异基础罗列
c++·基础·前端转c++
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
吞下星星的少年·-·2 天前
C++ 萌新语法入门篇
c++·算法比赛
霍霍的袁2 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
程序猿编码2 天前
告别改源码适配模型:纯 C++ 可配置 LLM 推理引擎,全格式全结构兼容
c++·大模型·llm·推理引擎
此生决int2 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++