DP-开心的金明
Posted 桃花涣小鱼干
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DP-开心的金明相关的知识,希望对你有一定的参考价值。
题目来源:
完整代码:
#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-开心的金明的主要内容,如果未能解决你的问题,请参考以下文章