背包类问题解答——poj3624分析

习题网址:http://poj.org/problem?id=3624

试题分析:该类题通过限定物品总数量、总质量;并且初始化每个物品的起始质量和一个量化的性质。最后求解最值的量化性质的值是多少的问题。

该类问题主要是可以通过:父问题的最优解依赖于一些子问题的 最优解 这就是所谓的最优子结构

核心思想:dp(i,j) = max{dp(i-1,j),dp(i-1,j-Ci)+Wi}

AC代码分析:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
int bag[12900]; //背包
int w[3410],v[3410]; //输入的两个属性
int main()
{
int n,m;
cin >> n >> m;     //最开始的数量和规定的质量
for(int i=1; i<=n; i++) //这也正是两个数组
cin >> w[i] >> v[i];    //完成了所有的输入
// memset(bag,0,sizeof(bag));这句话主要是用来清理的功能数目小的时候可以不使用
for(int i=1; i<=n; i++)
for(int k=m; k>=w[i]; k--)
if( bag[k-w[i]]+ v[i] > bag[k] )//求两个最大值的过程
bag[k] = bag[k-w[i]]+ v[i];
cout << bag[m] << endl;
return 0;
}

你可能感兴趣的:(poj)