本蒟蒻又来发题解啦!
这题是个紫题?
好吧,恶意评分可海星?
回到正题
这题很明显是贪心啊;
有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;
}
本蒟蒻又双叒叕被爆踩了