1328.装载问题加强版
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
现在码头有一批重量不同的货物,有三艘装载量不同的货船,试求出能否一次将货物装完
输入
第一行给出货物的数量n(n<=10)
第二行有n个整数,分别表示这n个货物的重量
第三行有3个整数,分别表示三艘货船的载重量
输出
若能够一次装完输出Yes,否则输出No
#include <iostream>
using namespace std;
int n;
int w[11];
int c1,c2,c3;
int cur1,cur2;
int all;
bool dfs(int m);
int main()
{
//输入数据
cin>>n;
all=0;
for(int i=0; i<n; i++)
{
cin>>w[i];
all+=w[i]; //计算所有货物的总重
}
cin>>c1>>c2>>c3;
//深搜
if(dfs(0))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
return 0;
}
bool dfs(int m)
{
if(m==n) //所有货物均已装完
{
if(all-cur1-cur2<=c3) //除去装入1和2的货物,如果剩下的货物能够装入3
{
return true;
}
else
{
return false;
}
}
else
{
//第m件货物装入1
cur1+=w[m];
if(cur1<=c1)
{
if(dfs(m+1))
{
return true;
}
}
cur1-=w[m];
//第m件货物装入2
cur2+=w[m];
if(cur2<=c2)
{
if(dfs(m+1))
{
return true;
}
}
cur2-=w[m];
//第m件货物不装入1也不装入2,等着最后装入3
if(dfs(m+1))
{
return true;
}
return false;
}
}
【2018/11/20后记】
1、和装载问题一模一样。
2、上午还信誓旦旦的说,下周二之前不上CSDN了,真香!怕是要被考试之神惩罚了orz