南邮 OJ 1325 子集树问题

子集树问题

时间限制(普通/Java) :  1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 11            测试通过 : 5 

比赛描述

 试设计一个用队列式分支限界法搜索子集空间树的函数。该函数的参数包括结点可行性判定函数和上界函数等必要的函数,并将此函数用于解装载问题。装载问题描述如下:有一批共n个集装箱要装上艘载重量为c的轮船,其中集装箱i的重量为w i 。找出一种最优装载方案,将轮船尽可能装满,即在装载体积不受限制的情况下,将尽可能重的集装箱装上轮船。

输入

 

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

输出

 

将计算出的最大装载重量输出。

样例输入

5 10
7 2 6 5 4

样例输出

10

提示

 

题目来源

算法设计与实验题解



#include<iostream>
#define MAX_N 100
#define MAX_C 1000
using namespace std;

int a[MAX_N];
int dp[MAX_N][MAX_C];

int main(){
//	freopen("test.txt","r",stdin);
	int n,c,i,j,temp1,temp2;
	scanf("%d%d",&n,&c);
	for(i=1;i<=n;i++){
		scanf("%d",a+i);
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=c;j++){
			temp1 = dp[i-1][j];
			if(j-a[i]>=0 && temp1<(temp2=a[i]+dp[i-1][j-a[i]])){
				temp1 = temp2;
			}
			dp[i][j] = temp1;
		}
	}
	printf("%d\n",dp[n][c]);
}






你可能感兴趣的:(ACM,南邮OJ,子集树问题)