Bone Collector HDU-2602 (01 informe de resolución de problemas de mochila)

Bone Collector
Descripción del problema
Hace muchos años, en la ciudad natal de Teddy había un hombre que se llamaba "Bone Collector". A este hombre le gusta recolectar varios huesos, como los de perros, vacas, también fue a la tumba ...
El recolector de huesos tenía una gran bolsa con un volumen de V, y en su viaje de recolección hay muchos huesos, obviamente, diferentes huesos tienen diferentes valores y diferentes volúmenes, ahora dado el valor de cada hueso a lo largo de su viaje, ¿puede calcular el máximo del valor total que puede obtener el colector de huesos? ``
Entrada
La primera línea contiene un número entero T, el número de casos .
Seguido de T casos, cada caso tres líneas, la primera línea contiene dos enteros N, V, (N <= 1000, V <= 1000) que representan el número de huesos y el volumen de su bolsa. Y la segunda línea contiene N enteros que representan el valor de cada hueso. La tercera línea contiene N enteros que representan el volumen de cada hueso.
Salida
Un número entero por línea que representa el máximo del valor total (este número será menor que 231).

Entrada de muestra
1 5
10 1 2 3 4 5 5 4 3 2 1

Salida de muestra
14

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1e5 + 10;
int w[maxn], c[maxn],dp[maxn];/////w[i]表示骨头的体积,c[i]表示骨头的价值
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		memset(dp, 0, sizeof(dp));
		int n, V;
		scanf("%d%d", &n, &V);
		for (int i = 1; i <= n; i++)
		{
			scanf("%d", &c[i]);
		}
		for (int i = 1; i <= n; i++)
		{
			scanf("%d", &w[i]);
		}		
		for (int i = 1; i <= n; i++)
		{
			for (int v = V; v >= w[i]; v--)
				dp[v] = max(dp[v], dp[v - w[i]] + c[i]);////状态转移方程
		}
		printf("%d\n", dp[V]);
	}
	return 0;
}
Publicado 7 artículos originales · elogiado 0 · visitas 67

Supongo que te gusta

Origin blog.csdn.net/weixin_45629285/article/details/105589138
Recomendado
Clasificación