背包问题和fatmouse贪心算法区别在于背包所能装入的物品最小单位是一件(即离散),故不可采用价值除以质量的方式求最优解如
背包限定重量为50
而后者装入斤数可为连续任意数值。
另附上数字三角形代码
动态规划核心思想在于由一个最小的局部最优解(最优子结构)递推(for 循环)至全局最优解,涵盖所有可能性但避免了重复计算(高效)。
#include <math.h>
#include <stdio.h>
#include <string.h>
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n;
scanf("%d",&n);
int d[100][100];
int num[100][100];
for(int i=1;i<=n;i++)
for(int j =1;j<=i;j++)
{
scanf("%d",&num[i][j]);
}
for(int j =1;j<=n;j++)
d[n][j]=num[n][j];
for (int m=n-1;m>=1;m--)
for(int k=1;k<=m;k++)
{
d[m][k]=num[m][k]+max(d[m+1][k],d[m+1][k+1]);
}
printf("%d",d[1][1]);
}