动态规划 完全背包问题

 比较简单的完全背包问题;

 题目大意为:小明有 X 元钱:有N种食物:P[ i ] 为 是食物的价钱 : V[ i ] 为 食物的美味度:

求 X 元钱 可以买到的最大美味度的食物:(一种食物可以被购买多次); 因为一开始忽略了这个条件 当成01 背包写的;

#include<bits/stdc++.h>
using namespace std;
//这是一个动态规划 的 完全背包问题
//dp[i][j]表示将前i件食物装进限制金钱为j的背包可以获得的最大美味度, 0 <= i <= n, 0 <= j <= x
//int dp[101][10001];
int P[101] = { 0 }; //金钱
int V[101] = { 0 }; //美味度
int F[10001];
int main() {
	int N = 0;
	scanf("%d", &N);
	int count = 0;
	while (N--) {
		count++;
		int n, x;
		scanf("%d%d", &n, &x);
		int tmp = n;
		//memset(dp, 0, sizeof(dp));
		memset(F, 0, sizeof(F));
		for (int i = 1; i <= n; i++) {
			scanf("%d%d", &P[i], &V[i]);
		}
		for (int i = 1; i <= n; i++) {
			for (int j = P[i]; j <= x; j++) {
				/*if (P[i] > j)
					dp[i][j] = dp[i - 1][j];
				else
					dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - P[i]] + V[i]);*/
				F[j] = max(F[j], F[j - P[i]] + V[i]);
			}
		}
		//printf("Case #%d: %d\n", count,dp[n][x]);
		printf("Case #%d: %d\n", count, F[x]);
	}
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值