bone collector

滚动数组。二维。。

31ms 212kB

#include <stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<algorithm>

using namespace std;


int T, M, N, V, i, j, dp[3][1100], value[1100], volume[1100];


int main( )
{
scanf(
"%d",&T);
while (T--)
{
scanf(
"%d%d",&N,&V);
memset(dp,
0, sizeof(dp));
for (i = 1; i <= N; i++)
scanf(
"%d",&value[i]);
for (i = 1; i <= N; i++)
scanf(
"%d",&volume[i]);
for (i = 1; i <= N; i++)
for (j = 0; j <= V; j++)
if (j >= volume[i])
dp[i
%3][j] = max (dp[(i - 1) % 3][j], dp[(i -1) % 3][j-volume[i]] + value[i]);
else
dp[i
%3][j] = dp[(i - 1) % 3][j];
printf(
"%d\n",dp[N%3][V]);
}
return 0;
}

posted on 2011-07-31 11:30  more think, more gains  阅读(106)  评论(0编辑  收藏  举报

导航