题目: http://codevs.cn/problem/1025/
思路:将价格和钱数浮点型值乘以10后,转换为整型。然后根据数据,将必须菜和美味值为0的菜从所有菜式中剔除。建立一个可选菜式队列,然后使用动态规划算法求解。
题解:
/* 1025 选菜 */
#include <stdio.h>
#define MAXN 101 /* 最大菜式数 */
#define MAXM 1001 /* 最大钱数 */
/* 菜式清单 */
struct _food{
int d; /* 美味值 */
int r; /* 必选标记 */
int p; /* 价格 */
}food[MAXN];
int n, k, m; /* 菜式,必选菜数, 钱数 */
int id[MAXN], delicious[MAXN], prices[MAXN]; /* 价目编号,美味值, 价目表 */
int reqd, required[MAXN]; /* 必选美味值,必选菜单 */
int queue[MAXN], count; /* 可选菜式队列,可选菜计数 */
int maxd[MAXM][MAXN]; /* 最大美味值表 */
/* 01背包算法求解最大美味值表 */