装载问题【回溯法】

问题描述

有一批共 nn 个集装箱要装上艘载重量为 cc 的轮船,其中集装箱 ii 的重量为 wiwi。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。

输入格式

第一行有 2 个正整数 nn 和 cc。 nn 是集装箱数,cc 是轮船的载重量。接下来的 1 行中有 nn 个正整数,表示集装箱的重量。

输出格式

一行,1 个整数,即最大装载重量。

样例一

input
5 10
7 2 6 5 4
output
10

数据范围与约定

时间限制: 1s1s

内存限制: 256MB

 时间原因......以后补上题解,凑合着看......

我才不会说我不会

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int maxx;
 4 int ans;
 5 int n,c;
 6 int sz[10000];
 7 void ss(int i,int k=0){
 8     if(maxx>c) return ;
 9     if(k==i+1) {
10         ans=max(ans,maxx);
11         return ;
12     } 
13     if(maxx+sz[k]<=c){
14         maxx+=sz[k];
15         ss(i,k+1);
16         maxx-=sz[k];
17     }
18     ss(i,k+1);
19 }
20 int main(){
21     cin>>n>>c;
22     for(int i=1;i<=n;i++){
23         cin>>sz[i];
24     }
25     sort(sz+1,sz+n+1);
26     ss(n);
27     cout<<ans;
28     return 0;
29 }

 

转载于:https://www.cnblogs.com/luv-letters/p/8550854.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值