C++贪心算法

排队打水

#include<bits/stdc++.h>
using namespace std;
void f(int);
int n;
int main()
{
	system("color 1");
	int m;
	cin>>n>>m;
	int a[100],b[100];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	sort(a+0,a+n);
	int sum=a[0];
	b[0]=a[0];
	for(int i=1;i<n;i++){
		if(i<m) b[i]=a[i];
		else b[i]=b[i-m]+a[i];
		sum=sum+b[i];
	}
	cout<<sum;
	return 0;
}
void f(int n){
	
	return;
}

活动选择

#include<bits/stdc++.h>
using namespace std;
void f(int);
int n;
int main()
{
	system("color 1");
	cin>>n;
	int begi[100],en[100];
	for(int i=0;i<n;i++){
		cin>>begi[i]>>en[i];
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(en[i]==begi[j]){
				int t2,t1;
				t1=begi[i+1];
				begi[i+1]=begi[j];
				begi[j]=t1;
				t2=en[i+1];
				en[i+1]=en[j];
				en[j]=t2;
				
			}
			else{
				for(int l=1;l<=n;l++){
					if(en[i]+l==begi[j]){
						int t2,t1;
						t1=begi[i+1];
						begi[i+1]=begi[j];
						begi[j]=t1;
						t2=en[i+1];
						en[i+1]=en[j];
						en[j]=t2;
					}
				}
			}
		}
	}
	int x[1000],lx=0;
	for(int i=0;i<n;i++){
		x[i]=en[i];
		lx++;
	}
	cout<<lx;
	return 0;
}
void f(int n){
	
	return;
}

拦截导弹的系统数量求解

#include<bits/stdc++.h>
using namespace std;
void f(int);
int n;
int main()
{
	system("color 1");
	int k=0;
	int a[100];
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	int mi=a[1];
	for(int i=n;i>0;i--){
		for(int i=1;i<=n;i++){
			if(a[i]<=mi){
				mi=a[i];
				for(int j=i;j<n;j++){
					a[j]=a[j+1];
				}
				n--;
				i--;
			}
		}
		k++;
	}
	cout<<k;
	return 0;
}
void f(int n){
	
	return;
}

拼点问题

#include<bits/stdc++.h>
using namespace std;
bool cmp(int,int);
int n;
int c[1100],s[1100];
int main()
{
	system("color 1");
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>c[i];
	}
	for(int i=0;i<n;i++){
		cin>>s[i];
	}
	sort(c+0,c+n,cmp);
	sort(s+0,s+n,cmp);
	int i=0,j=0,cnt=0;
	while(i<n&&j>n){
		if(s[j]>c[j]){
			cnt=cnt+3;
			i++;
			j++;
		}
		else if(s[j]==c[i]){
			cnt=cnt+2;
			i++;
			j++;
		}
		else if(s[j]<c[i]){
			i++;
		}
	}
	while(j<n){
		cnt=cnt+1;
		j++;
	}
	cout<<cnt;
	return 0;
}
bool cmp(int a,int b){
	return a>b;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值