题解 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;
}

第一次写代码,

请多多包含,欢迎指出错误,

这里团子,很高兴你们能看到我的题解!