DP-开心的金明

Posted 桃花涣小鱼干

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DP-开心的金明相关的知识,希望对你有一定的参考价值。

题目来源:

[NOIP2006 普及组] 开心的金明

完整代码:

#include<stdio.h>
#define MAX 30005
int n,m;
int v[26],w[26];
int dp[MAX];
int max(int x, int y)
{
	return x > y ? x : y;
}
int main()
{
	int i,j;//物品序号和物品价值
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
		scanf("%d%d",&v[i],&w[i]);
	for(i=1;i<=m;i++)
		for(j=n;j>=v[i];j--)
			dp[j]=max(dp[j],dp[j-v[i]]+w[i]*v[i]);
	printf("%d",dp[n]);
	return 0;
}

思路解析:

第一步:读入

int i,j;//物品序号和物品价值
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
		scanf("%d%d",&v[i],&w[i]);

第二步:dp数组的反复迭代直到找出最优解

for(i=1;i<=m;i++)
		for(j=n;j>=v[i];j--)
		//价值到降到比第i件物品价值还低时一定不选第i件物品,在此之前的数组不变
			dp[j]=max(dp[j],dp[j-v[i]]+w[i]*v[i]);
			//选和不选(选的话加入的是物品的价格与重要度乘积)

第三步:输出

printf("%d",dp[n]);

END

以上是关于DP-开心的金明的主要内容,如果未能解决你的问题,请参考以下文章

dp--背包--开心的金明

Luogu P1060 开心的今明(DP背包)

luogu#P1060 开心的金明

金明的预算方案 (背包DP)

洛谷P1064 金明的预算方案(dp)

vijos 1313 金明的预算方案 树形DP