`

杭电 hdu 3496 Watch The Movie 二维背包

阅读更多
这题我也做得很糊涂,主要是没有太多测试数据,哪里错了,怎么错了都不清楚,只能是自己抽象地想像一下它的原理啊什么的,参观一下别人的代码,然后摸着那种若有若无的原理慢慢走……好想有测试数据啊!!!


/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.

URL   : http://acm.hdu.edu.cn/showproblem.php?pid=3496
Name  : 3496 Watch The Movie

Date  :Saturday, August 06, 2011
Time Stage :6 hours around

Result:
4347636	2011-08-06 15:39:30	Accepted	3496
46MS	4116K	1229 B
C++	pyy



Test Data:

Review:
没有更多测试数据,哪里错的都不知道,气死我了,最后只能半知半解地理解一下了。参考
了很多大牛的代码,表示无比崇拜啊!
//----------------------------------------------------------------------------*/


#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>

#define max(a, b) (((a) > (b)) ? (a) : (b))
#define min(a, b) (((a) < (b)) ? (a) : (b))

#define MAXSIZE 1001

int want, sale, lngst, tcase ;
int val[MAXSIZE], tim[MAXSIZE], dp[MAXSIZE][MAXSIZE] ;

int twoDimension ()
{
	int i, j, k, iMax ;
	memset (dp, -1, sizeof (dp)) ;
	dp[0][0] = 0 ;

	for (i = 1 ; i <= want ; ++i)
	{
		for (j = sale ; j >= 1 ; --j)
		{
			for (k = lngst ; k >= tim[i] ; --k)
			{
				if (dp[j-1][k-tim[i]] != -1)
					dp[j][k] = max (dp[j][k], dp[j-1][k-tim[i]] + val[i]) ;
				//				printf ("[%d][%d]:%d ", j, k, dp[j][k]) ;
			}
			//			puts ("-") ;
		}
		//		puts ("=") ;
	}
	/*
	for (i = 1 ; i <= want ; ++i)
	{
	for (j = 1 ; j <= lngst ; ++j)
	printf ("%d ", dp[i][j]) ;
	puts ("") ;
	}
	*/
	iMax = 0 ;
	for (i = 1 ; i <= lngst ; ++i)
		if (iMax < dp[sale][i])
			iMax = dp[sale][i] ;
	return iMax ;
}

int main ()
{
	int i, j ;
	while (scanf ("%d", &tcase) != EOF)
	{
		while (tcase--)
		{
			scanf ("%d%d%d", &want, &sale, &lngst) ;
			for (i = 1 ; i <= want ; ++i)
				scanf ("%d%d", &tim[i], &val[i]) ;
			printf ("%d\n", twoDimension ()) ;
		}
	}
	return 0 ;
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics