题解 P1049 【装箱问题】
小伙伴们大家好(๑╹◡╹)ノ”,
这里是刚入门的萌新,
这题看许多大佬都在用背包和搜索,
这里是一个刚刚学完数组和循环的小萌新咋办啊......
我看了一下本题数据,
n<30,所以是开数组完全可以的,
这个时候,我们就可以用排序了
题解用的是冒泡,
当然别的排序应该是也可以的,
然后,
我们先从小到大往箱子里塞,
用n记录一下剩余空间,
再从大到小往里塞,
用n1记录,
最后比较大小
这样的话,基本可以包括到大部分情况了,
本题就完全莫得问题, 上代码
#include<iostream>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1000001];
int main()
{
int n,x,sum=0,n1;
cin>>n>>x;
n1=n;
for(int i=1;i<=x;i++)
{
cin>>a[i];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[j+1]!=0)
if(a[j]>a[j+1])
swap(a[j],a[j+1]);
for(int i=1;i<=x;i++)
{
if(n1-a[i]>0) n1-=a[i];
if(n1-a[i]==0) n1-=a[i];
if(n1<=0) break;
}
for(int i=x;i>=1;i--)
{
if(n-a[i]>0) n-=a[i];
if(n-a[i]==0) n-=a[i];
if(n<=0) break;
}
if(n1<n)
n=n1;
cout<<n;
return 0;
}
第一次写代码,
请多多包含,欢迎指出错误,
这里团子,很高兴你们能看到我的题解!