【蓝桥杯14天冲刺课题单】Day3

1. 题目链接:1025 答疑

贪心类型的题目做法很简单,只需要保证局部解最优即可保证整体解最优。

这里的思路就是第i个学生前面的人答疑所用的时间最短,那么他所发送短信的时间节点越小。这道题目有个需要注意的点是:要先将前i-1个学生所用的总时长加到res统计结果的计数器中,再加上第i个学生的进入时间和答疑时间才是正确的数据,不能加漏。以及语句之中的空格能不打就不打,以免出现不必要的错误。

#include <bits/stdc++.h> 
using namespace std;
const int maxn=1e3+5;
struct student{
	long long int s,a,e;
	unsigned long long int sum1,sum2;
}stud[maxn];
bool cmp(student x,student y)
{
	if(x.sum1 == y.sum1) return x.sum2<y.sum2;
	else return x.sum1<y.sum1;
} 
int main()
{
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%lld %lld %lld",&stud[i].s,&stud[i].a,&stud[i].e);
		stud[i].sum1=stud[i].s+stud[i].a+stud[i].e;
		stud[i].sum2=stud[i].s+stud[i].a;
	}
	sort(stud,stud+n,cmp);
	long long int res=0,temp=0;
	for(int i=0;i<n;i++)
	{
		res +=temp+stud[i].sum2;
		temp +=stud[i].sum1;
	}
	printf("%lld",res);
	return 0;
 } 

2.题目链接:19724 食堂

这道题的贪心思路是:尽量保证能坐下的人最多,则通过题目所给出的示例可知,尽量用3人寝的填满6人桌,或者1个2人寝和1个4人寝室填满6人桌(这个的实现思路非常巧妙,后面会讲),用2人寝填满4人桌。也就是尽量不要留空位。

那么先满足六人桌。先解决3人寝,再让1个2人寝的坐6人桌,此时剩下4个位置,将这4个位置看成一个4人桌,则4人桌的个数需要加1。

6人桌坐满后,对4人桌进行处理。先让2人寝坐满4人桌,再接着4人寝室,3人寝,2人寝此时只剩1个,会浪费2个位置。 

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
int q;
int main()
{
	cin>>q;
	for(int i=1;i<=q;++i)
	{
		int a2,a3,a4,b4,b6;
		cin>>a2>>a3>>a4>>b4>>b6;
		int result=0;
		while((a3>=2) && b6) 
		{
			result+=6;
			a3-=2;
			b6--;
		}
		
		while(a2 && b6) 
		{
		result+=2;
		a2--;
		b6--;
		b4++; //看了别人的题解,这里真的很绝
		}
		while(a4 && b6) 
		{
		result+=4;
		a4--;
		b6--;
		}
		while(a3 && b6) 
		{
		result+=3;
		a3--;
		b6--;
		}
		
		while(a4 && b4) 
		{
		result+=4;
		a4--;
		b4--;
		}
		while((a2>=2) && b4) 
		{
		result+=4;
		a2-=2;
		b4--;
		}
		
		while(a3 && b4) 
		{
		result+=3;
		a3--;
		b4--;
		}
		
		while(a2 && b4) 
		{
		result+=2;
		a2--;
		b4--;
		}		
		cout<<result<<endl;
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值