题目要求:
解题思路:
本题和背包问题类似,再利用动态规划算法,计算再n钱时能购买的最大价值的物品,n值一直涨到最大值,求 出最大价值(详见代码备注)
代码如下:
/************************************************************************
* 文件名:Buylist
* 文件功能描述:购物单
* 文件作者名:Mr_han QQ:785937095
* 说明:
* 1、每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件
* 2、每件物品规定了一个重要度,分为 5 等:用整数 1 ~ 5 表示,第 5 等最重要
* 3、在不超过 N 元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最大
**************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define LONG long
#define CHAR char
#define MAX_N 3000
#define MAX_M 10
LONG Knapsack ( LONG v[], LONG w[], LONG pro[], LONG N, LONG m)
{
LONG c[MAX_M][MAX_N], i, j; /*c[i][j]前i件物品在有j钱的时候可以获得最大价值*/
bool flag[MAX_M][MAX_N]; /*flag[i][j]用表示第i件物品在有j钱的时候是否购