裝載問題——搜索回溯算法

原題如下:

裝載問題

【問題描述】

       有一批共n個集裝箱要裝上艘載重量爲c的輪船,其中集裝箱i的重量爲wi。找出一種最優裝載方案,將輪船儘可能裝滿,即在裝載體積不受限制的情況下,將盡可能重的集裝箱裝上輪船。

【輸入格式】

       由文件load.in給出輸入數據。第一行有2個正整數n和c。n是集裝箱數,c是輪船的載重量。接下來的1行中有n個正整數,表示集裝箱的重量。

【輸出格式】

        將計算出的最大裝載重量輸出到文件load.out。

【輸入樣例】

5 10

7 2 65 4

【輸出樣例】

  10

此題一般都用貪心,而用搜索回溯也可以做,廢話少說,上代碼:

#include <cstdio>
#include <iostream>
#include<cstdlib>
using namespace std;
int n,c,a[1001];
int maxx=0;
void search(int,int);
int main()
{
	cin>>n>>c;
	for(int i=1;i<=n;i++)
	  cin>>a[i];
	search(0,1);
	cout<<maxx;
	return 0;
}
void search(int sum,int t)
{
	if(sum>c)
		return ;
	maxx=max(maxx,sum);
	for(int i=t+1;i<=n;i++)
		search(sum+a[i],i);
}
簡單易懂,自己慢慢品味。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章