杭电 hdu 3496 Watch The Movie 二维背包

来源:互联网 发布:淘宝卖家如何主动退款 编辑:程序博客网 时间:2024/05/16 11:46

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


/* THE PROGRAM IS MADE BY PYY *//*----------------------------------------------------------------------------//Copyright (c) 2011 panyanyany All rights reserved.URL   : http://acm.hdu.edu.cn/showproblem.php?pid=3496Name  : 3496 Watch The MovieDate  :Saturday, August 06, 2011Time Stage :6 hours aroundResult:43476362011-08-06 15:39:30Accepted349646MS4116K1229 BC++pyyTest 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 1001int 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 ;}


原创粉丝点击