讨论 / 递归贪心思想的结合
360736293 2018-05-07 05:38:54
点我顶贴 收藏 删除
贪心思想体现在,如果要求5个物品时的最优解,那么求一个物品时的最优解,完了求出两个物品的最优解,接着求出三个物品的最优解依次类推,同时就体现出了递归思想,要求2个物品最优解,你得先知道一个物品的最优解,就是这样

接下来看代码

------------------------------------------------------------

#include<stdio.h>

#define max(a,b) ( a > b ? a : b )

int dp[30001]={0}, v[26], w[26];

int N, m;

int i, j;

int main()

{

scanf("%d%d",&N,&m) ;

for(i = 0; i < m; i++)

scanf("%d%d",&v[i],&w[i]);0

for(i = 0; i < m; i++)//分出m个情况(1个物品求最优,2个物品求最优。。。。。m个物品求最优)

for(j = N; j >= v[i]; j--)//求此情况最优解(其实此处只需执行一次即可,就是j==v[i]的情况,但是无法跳出,所以就得j--,从头遍历)

dp[j] = max(dp[j],dp[j-v[i]] + v[i] * w[i]);

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

return 0;

}

#1 360736293@2018-05-07 05:40:58
回复 删除
注意程序中给v[i]w[i]赋值那里的冒号后面我多打了一个0,记得清掉
#2 360736293@2018-05-13 21:57:33
回复 删除
思路有误,请仅仅参考程序
查看更多回复
提交回复