编辑代码

#include <iostream>
#include<string.h>
#define Max 20
using namespace std;
int w[Max];
int maxw=0;
int  x[Max]; //记录当前第一艘船的解向量
void dfs(int tw,int rw,int op[],int i,int c1,int n,int w[])
{
    if(i>n)
    {
        if(tw<=c1&&tw>maxw){
        maxw=tw;
        for(int j=1;j<=n;j++)
        x[j]=op[j];
    }
    }
    else{
        op[i]=1;
        if(tw+w[i]<=c1)
        {
           if(tw+w[i]<=c1)
           dfs(tw+w[i],rw-w[i],op,i+1,c1,n,w);
        }
    }
}
void display(int n,int w[])
{
   for(int j=1;j<=n;j++)
   {
       if(x[j]==1)
       {
             cout<<"第"<<j<<"集装箱装进第一艘船"<<endl;

       }
       else
       {
                cout<<"第"<<j<<"个集装箱装进第二艘船"<<endl;
       }
   }
}
bool solve(int c2,int n,int w[])
{
    int sum=0;
    for(int i=1;i<=n;i++)
    {
        if(x[i]==0)
        sum+=w[i];
        if(sum>c2)
        return false;
        else
        return true;
    }
}
int main() {
    int op[Max]={0};
    int rw=0,n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>w[i];
    }
    int c1,c2;
    cin>>c1>>c2;
    for(int i=1;i<=n;i++)
    rw+=w[i];
    dfs(0,rw,op,1,c1,n,w);
    if(solve(c2,n,w))
    {
        cout<<"装载方案"<<endl;
    display(n,w);
    }
    else{
        cout<<"无正确方案";
    }
	return 0;
}