zoukankan      html  css  js  c++  java
  • 01 背包问题

    二维数组

    #include <iostream>
    #include <string>
    #include <math.h>
    #include<algorithm>
    #include<cstdio>
    #include<string.h>
    using namespace std;
    int n, c;
    int m[1000], v[1000];
    int f[1000][1000];
    int main()
    {
    	cin >> c >> n;
    	for (int i = 1; i <= n; i++)
    	{
    		cin >> m[i] >> v[i];
    		f[i][0] = 1;
    	}
    	f[0][0] = 1;
    	for (int i = 1; i <= n; i++)
    		for (int j = 1; j <=c; j++) {
    			f[i][j] = f[i - 1][j];
    			if (j - m[i] >= 0)
    				f[i][j] = max(f[i - 1][j], f[i - 1][j - m[i]] + v[i]);
    		}
    	cout << f[n][c] << endl;
    }
    

    空间优化 一维数组

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<string>
    #include<cstring>
    #include<cmath>//把我所记住的头文件全写上了(大家不要学我); 
    using namespace std;
    int n, c;//定义物品数量及背包容量; 
    int w[1000], v[1000];//定义数组w[i]和v[i]分别表示物品i的质量和价值(1000毫无意义); 
    int f[1000];//定义数组f[i][j]存放第i个时的当前最大值(乱说胡话); 
    int main()
    {
    	cin >> c >> n;//输入n,c; 
    	for (int i = 1; i <= n; i++)
    		cin >> w[i] >> v[i];//输入第1~n个物体的质量和价值 ; 
    	for (int i = 1; i <= n; i++)
    		for (int j = c; j >= w[i]; j--)
    			f[j] = max(f[j], f[j - w[i]] + v[i]);
    	cout << f[c] << endl;//希望没输错……
    }
    
  • 相关阅读:
    console.dir()和console.log()的区别
    md5
    sorket is closed
    箱形图和小提琴图
    PCA降维
    模式识别与机器学习(二)
    模式识别与机器学习(一)
    论文研读Unet++
    分类中使用的一些评价指标
    前列腺分割论文
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811930.html
Copyright © 2011-2022 走看看