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;
}