111(wgzs)
  • 板块灌水区
  • 楼主H_Hutao
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/10/6 10:09
  • 上次更新2024/10/6 10:13:20
查看原帖
111(wgzs)
1378819
H_Hutao楼主2024/10/6 10:09

题目描述 有n个盒子,它们的大小和重量相同,但材料的强度可能不同。其中每个盒子都有一个对应的强度x。即这个盒子顶部可以放多少个盒子。 现在要将这些盒子叠放起来,为了节省空间,问这些盒子最少可以放成几堆。 在示例1中,最佳方法是放2 堆:第一堆: 1在顶部,3 在底部,第二堆:仅包含2 输入格式 第一行包含整数n(1<=n<=100) ( 下一行包含 n个整数x1 ,x2 ,...,xn (0<=xi<=100) 输出格式

输出最少需要放几堆。

样例 输入样例 1

3 1 2 3

输出样例 1

2

数据范围与提示 对于100%的数据,1<=n<=100,0<=xi<=100 。

#include<bits/stdc++.h>
using namespace std;
int cnt;
int cmp(int x,int y){
	return x>y;
}
int main(){
    int n,a[114514];
    cin>>n;
    for(int i=1;i<=n;i++){
	   cin>>a[i];	
	}
    for(int i=1;i<=n;i++){
	    sort(a+1,a+n+1,cmp);
	    int sum=0;
	    if(a[1]==0){
	    	break;
		}
	    int p=a[1];
	    a[1]=0;
    	for(int j=n;j>0;j--){
    		if(sum+a[j]<p){
    			sum+=a[j];
    			a[j]=0;
			}
			else{
				cnt++;
				break;
			}
			if(j==1&&a[j]==0){
				cnt++;
				break;
			}
		}
	}
	cout<<cnt;
    return 0;
}

如果有问题,欢迎大佬指点,这也是帮别人解答的,怕出错

2024/10/6 10:09
加载中...