博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
noj算法 装载问题 回溯法
阅读量:4622 次
发布时间:2019-06-09

本文共 1070 字,大约阅读时间需要 3 分钟。

描述:

 

有两艘船,载重量分别是c1、 c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2。确定是否有可能将所有集装箱全部装入两艘船。

输入:

 

多个测例,每个测例的输入占两行。第一行一次是c1、c2和n(n<=10);第二行n个整数表示wi (i=1…n)。n等于0标志输入结束。

输出:

 

对于每个测例在单独的一行内输出Yes或No。

输入样例:

 

7 8 2

8 7
7 9 2
8 8
0 0 0

输出样例:

 

Yes

No

 

题解:

       变形的01背包问题,先按最优解把c1装好,在看剩下的集装箱是否小于c2的容量。

 

代码:

#include 
#include
#include
using namespace std;int c1,c2,n,s,w[11],b,f1[11],f2[11],cw; //cw是当前最优解,b是记录的最优解,void fun(int i){ if(i>n) { if(cw>b) { for(int j=1;j<=n;j++) f2[j]=f1[j]; b=cw; } return; } s-=w[i]; if(cw+w[i]<=c1){ f1[i]=1; cw+=w[i]; fun(i+1); cw-=w[i]; } if(cw+s>b) { f1[i]=0; fun(i+1); } s+=w[i];}int main(){ int i; while(1){ cin>>c1>>c2>>n; b=0; s=0; cw=0; if(c1==0&&c2==0&&n==0) break; for(i=1;i<=n;i++) {cin>>w[i];s+=w[i];} fun(1); if(s-b<=c2) cout<<"Yes"<

 

 

 

 

 

转载于:https://www.cnblogs.com/y1040511302/p/9733340.html

你可能感兴趣的文章
linux_命令格式和命令提示符
查看>>
Cocos2d-X-3.0之后的版本的环境搭建
查看>>
when case group by 的用法集合
查看>>
洛谷P1908 逆序对
查看>>
转义符
查看>>
poj 1019
查看>>
asp.net mvc上传文件
查看>>
bitmq集群高可用测试
查看>>
主成分分析(PCA)原理详解
查看>>
短信验证接口网址
查看>>
Geohash距离估算
查看>>
Demon_背包系统(实现装备栏,背包栏,可以切换装备)
查看>>
记录:一次数据库被恶意修改配置文件的问题
查看>>
redis 持久化
查看>>
解决Jupyter notebook[import tensorflow as tf]报错
查看>>
Windows平台下使用ffmpeg和segmenter实现m3u8直播点播
查看>>
python网络画图——networkX
查看>>
ubuntu16.04文件形式安装mongodb
查看>>
SpringBoot------ActiveMQ安装
查看>>
详细了解 int? 类型
查看>>