Java教程

1268:【例9.12】完全背包问题

本文主要是介绍1268:【例9.12】完全背包问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

                                1268:【例9.12】完全背包问题

【题目描述】

设有nn种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的,同时有一个背包,最大载重量为MM,今从nn种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于MM,而价值的和为最大。

【输入】

第一行:两个整数,MM(背包容量,M≤200M≤200)和NN(物品数量,N≤30N≤30);

第2..N+12..N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值。

【输出】

仅一行,一个数,表示最大总价值。

【输入样例】

10 4
2 1
3 3
4 5
7 9

【输出样例】

max=12
#include <cstdio>
using namespace std;
const int maxm=2001,maxn=31;
int n,m,v,i;
int c[maxn],w[maxn];
int f[maxm];	
int main( void )
{
scanf("%d%d",&m,&n);           
    for(i=1;i<=n;i++) 
        scanf("%d%d",&w[i],&c[i]);
        for(i=1;i<=n;i++)
        for(v=w[i];v<=m;v++)            
            if(f[v-w[i]]+c[i]>f[v])  f[v]=f[v-w[i]]+c[i];
	printf("max=%d\n",f[m]);   
	return 0;
}
 
这篇关于1268:【例9.12】完全背包问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!