hduoj_2602(01背包裸题,动态规划)

这次理解的更深刻了一些。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int vol[1001];
int val[1001];
int dp[1001];

int main()
{
	int n;
	int v;
	int V, N;
	int i;
	scanf("%d", &n);
	while (n--)
	{
		scanf("%d %d", &N, &V);
		for (i = 1; i <= N; i++)
			scanf("%d", &val[i]);
		for (i = 1; i <= N; i++)
			scanf("%d", &vol[i]);

		memset(dp, 0, sizeof(dp));
		for (i = 1; i <= N; i++)
		{
			for (v = V; v >= vol[i]; v--)
				dp[v] = dp[v] > (dp[v - vol[i]] + val[i]) ? dp[v] : (dp[v - vol[i]] + val[i]);
		}

		printf("%d\n", dp[V]);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_32862515/article/details/80709591