设为首页 加入收藏

TOP

POJ 3628 Bookshelf 2 题解
2015-07-24 05:50:46 来源: 作者: 【 】 浏览:4
Tags:POJ 3628 Bookshelf 题解

本题解法很多,因为给出的数据特殊性故此可以使用DFS和BFS,也可以使用01背包DP思想来解。

因为一般大家都使用DFS,这里使用很少人使用的BFS,缺点是比DFS更加耗内存,不过优点是速度比DFS快。

当然也比DFS难写点:

int N, B;
int Height[21];
inline int mMin(int a, int b) { return a > b? b : a; }
inline int mMax(int a, int b) { return a < b? b : a; }

int bfs()
{
	vector
  
    vStk;	
	vStk.push_back(0);

	int id = 0;
	int mh = INT_MAX;
	while (id < N)
	{
		for (int i = (int)vStk.size() - 1; i >= 0 ; i--)
		{
			int h = vStk[i] + Height[id];
			if (h >= B) mh = mMin(mh, h-B);
			vStk.push_back(h);
		}//缺点,会消耗大量的内存,最后vector会非常大,优点,速度比dfs快
		id++;
	}
	return mh;
}

int main()
{
	while (scanf("%d %d", &N, &B) != EOF)
	{
		for (int i = 0; i < N; i++)
		{
			scanf("%d", &Height[i]);
		}
		printf("%d\n", bfs());
	}
	return 0;
}
  





】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇LeetCode-Insertion Sort List (P.. 下一篇Vijos P1002 过河 (NOIP提高组20..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: