título DP Código de la mochila de 01 a explicar algunos de los puntos + propenso a errores

01 mochila Título + + algunos del código de punto propenso a errores Detallado

01 tema mochila más original

Hay N artículos V y una capacidad de la mochila. Cada elemento sólo puede utilizarse una vez.
El volumen es los elementos de orden i vi, wi valor.
¿Qué solución de los artículos en la bolsa, el volumen total de estos elementos no puede exceder la capacidad de la mochila, y el valor total de la máxima.
El valor de salida máximo.

Formato de entrada
de la primera fila de dos números enteros, N, V, separados por espacios, respectivamente, y el número de artículos de la mochila volumen.
Entonces hay N filas, cada fila dos enteros vi, wi, separados por espacios, respectivamente, y el volumen de la i-ésimo valor de los artículos.

Formato de salida
de salida de un entero que representa el valor máximo.
Rango de datos
0 <N, V≤1000
0 <VI, wi≤1000

Complejidad de tiempo O (nm), la complejidad espacial O (nm)
código es el siguiente:

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int v[N],w[N];//储存每个物品的体积v,价值w 
int f[N][N];//记录将i个物品装入体积为j的背包的最大价值,且全局变量初始化为0,即满足边界条件,f[i][0]=f[0][j]=0,装0个物品的价值为0 
int n,m;//n个物品,最大体积为m 
int main(){
	 int n,m;
	 cin>>n>>m;
	 for(int i=1;i<=n;i++)
	 	cin>>v[i]>>w[i];
	 for(int i=1;i<=n;i++)//对于n个物品只有选或不选两种选择 
	 	for(int j=1;j<=m;j++)//记录装i个物品体积分别为1到m时的最大价值 
	 	{
	 		if(j<v[i])//如果装不了第i件物品,则f[i][j]=f[i-1][j]
	 		f[i][j]=f[i-1][j];
	 		else//如果装的了,还需比较装i-1件物品体积为j的最大价值和装i-1物品体积为j-v[i]的价值加w[i]的价值谁大 
	 		f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]);
	 	}
	 	cout<<f[n][m]<<endl;//最后的结果即(体积肯定最大价值才会更大)体积为m最大时,遍历完n件物品后的所能装进背包的最大价值 
}

Para optimizar el espacio de complejidad O (m), el siguiente código:

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,m;
int f[N];//体积为j时的最大价值 
int v[N],w[N];
int main(){
	 cin>>n>>m;
	 for(int i=1;i<=n;i++)
	 	cin>>v[i]>>w[i];
	for(int i=1;i<=n;i++)
		for(int j=m;j>=v[i];j--)//如果顺序则右边等式为i时刻的状态,而不是i-1时刻的状态,也就是说i时刻状态可能与i-1时刻状态不同 
			f[j]=max(f[j],f[j-v[i]]+w[i]);
		cout<<f[m]<<endl;
}

HDU2602 01 mochila título desnuda, sino más bien una multigrupo

#include<bits/stdc++.h>
using namespace std;
const int N=1005;
int n,m,t;
int v[N],w[N],f[N];
int main(){
	cin>>t;
	while(t--){
		memset(f,0,sizeof(f));
		cin>>n>>m;
		for(int i=1;i<=n;i++)
			cin>>w[i];
		for(int i=1;i<=n;i++)
			cin>>v[i];
		for(int i=1;i<=n;i++)
			for(int j=m;j>=v[i];j--)
			   f[j]=max(f[j],f[j-v[i]]+w[i]);
			   cout<<f[m]<<endl;
	}
	return 0;
}

HDU2546 01 necesidades mochila para determinar qué mochila

#include<bits/stdc++.h>
using namespace std;
const int N=1050;
int n,m,f[N],w[N];//f[j]记为原始余额为j时所能花费的最大钱 
int main(){
	 while(cin>>n&&n){//输入n且n不为0 
	 	memset(f,0,sizeof(f));//多组数据一定记得初始化 
	 	memset(w,0,sizeof(w));
	 	for(int i=1;i<=n;i++)
	 		cin>>w[i];
	 	cin>>m;
		if(m<5) {//这里判断一下,如果m小于5直接输出 
			cout<<m<<endl;
			continue;
				}
		 sort(w+1,w+n+1);//排序找出价值的最大,然后用最后5块减去最大价值,剩余价值就会越少 
		 m-=5;
		 if(m>=w[1])//这里也要判断一下如果m一个都买不起就不操作,也可不判断,因为内存循环已经判断了 
		 {
		 	for(int i=1;i<n;i++)
		 		for(int j=m;j>=w[i];j--)
		 			f[j]=max(f[j],f[j-w[i]]+w[i]);//状态转移方程类比01背包 
		 }
		 printf("%d\n",m+5-f[m]-w[n]);//m-f[m]余下的钱所能买得最多的,加上5块钱-最大的 
	 } 
} 

HDU1171 01 mochila, se convirtió en más de artículos sólo, uno por uno, en el que la matriz está bien

#include<bits/stdc++.h>
using namespace std;
const int N=3e5;
int f[N],n,m;
int w[55];
int a[N];
int main(){
	int sum,cnt;
	while(cin>>n&&n>=0){//结束条件 
		sum=0;//初始化 
		int k=1; 
		memset(f,0,sizeof(f));//老规矩dp多组初始化 
		for(int i=1;i<=n;i++){
			cin>>w[i]>>cnt;
			while(cnt--){
				sum+=w[i];
				a[k++]=w[i];//将所有的设备一个一个地放入数组 
			}
			}
		for(int i=1;i<k;i++)//遍历每一个设备 
			for(int j=sum/2;j>=a[i];j--)//从sum/2开始,因为要求所用设备的总金钱相差越小越好 
				f[j]=max(f[j],f[j-a[i]]+a[i]);
		printf("%d %d\n",sum-f[sum/2],f[sum/2]);//sum-f[sum/2]肯定大于等于f[sum/2] f[sum/2]用一半的钱所能买的最多设备 
		} 
	return 0; 
} 

En más de seguimiento. . . . . . . . . . . . .

Publicado 18 artículos originales · alabanza ganado 14 · vistas 369

Supongo que te gusta

Origin blog.csdn.net/weixin_45750972/article/details/103579562
Recomendado
Clasificación