本蒟蒻又来发题解啦!

这题是个紫题?

好吧,恶意评分可海星?

回到正题

这题很明显是贪心啊;

有a个坚果,b个隔板,x个隔板,最多分成v个区间。

那么我们的贪心策略是:

如果一共使用的挡板小于x,且当前的箱子个数不足k。

那么,就继续往这个箱子内加,直到大于为止,很水是吧。

直接看代码(附详解:

#include<bits/stdc++.h>
using namespace std;

int a, b, k, v, sum, ans;
//a, b, k, v如题,sum是当前箱子的区间数,ans 是箱子的个数
int main()
{
scanf("%d%d%d%d", &k, &a, &b, &v);//输入k, a, b, v;
while(true)//有点皮,不过就是这么写的
{
if(a <= 0)//如果坚果装够了,那就跳出。
break;
sum = 1;//最开始的每个箱子中都有一个区间
while(b > 0)//如果还有隔板
if(sum < k)//且这个箱子中区间的个数小于k
{
++ sum;//区间个数加加
-- b;//隔板数目减减
}
else
break;//如果没隔板了就退出
a -= sum * v;//坚果的个数要减去这个箱子中的区间的个数 乘上 最大坚果量的个数
//莫非你一个区间内可以装v个,你却只装1个,还是v - 1个?
++ ans;//统计箱子个数;
}
printf("%d", ans);//输出啦
return 0;
}

本蒟蒻又双叒叕被爆踩了

12-27 03:01