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) 编辑 收藏 举报