

大致思路:
开一个优先队列,开始将w入队,因为方块高度全为1,故只看其长度即可,将其从大到小排队,优先队列里存每一行的剩余容量,如果a[i]大于与队顶(放不下),则开辟新一行,及将(w-a[i])入队,否则将(q.top()-a[i])入队,最后队列长度即为答案。
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N=100010;
typedef long long ll;
bool cmp(ll a,ll b)
{
return a>b;
}
int a[N];
int main()
{
int t;cin>>t;
while(t--)
{
int n,w;
cin>>n>>w;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
priority_queue<ll>q;
q.push(w);
sort(a,a+n,cmp);
for(int i=0;i<n;i++)
{
int t=q.

该博客介绍了如何使用贪心策略结合优先队列解决B. Box Fitting问题。通过创建一个优先队列,按方块长度从大到小排序,根据每个方块的尺寸决定是否新开一行或更新当前行的剩余空间,最终优先队列的长度即为答案。
最低0.47元/天 解锁文章
518

被折叠的 条评论
为什么被折叠?



