百度面试题 0-1背包问题-动态规划法
2015-08-31 21:29
615 查看
#include<stdio.h>
#include<string.h>
int main()
{
int N = 3;
int V = 5;
int C[4] = {0,1,2,3};
int W[4] = {0,60,100,120};
int f
[V];
//memset(f,0,sizeof(int)*N*V);
for(int i=0;i<=V;i++)
f[0][i] = 0;
for(int i=1;i<=N;i++)
{
f[i][0] = 0;
for(int j = 1;j<=V;j++)
{
if(j<C[i])
f[i][j] = f[i-1][j];
else
f[i][j] = (f[i-1][j] > (f[i-1][j-C[i]]+W[i])? f[i-1][j]:(f[i-1][j-C[i]]+W[i]));
}
}
printf("value:weight: ");
for(int i=1;i<4;i++)
{
printf("%d:%d ",C[i],W[i]);
}
printf("\nThe final value is %d\n",f
[V]);
return 0;
}
运行结果:
#include<string.h>
int main()
{
int N = 3;
int V = 5;
int C[4] = {0,1,2,3};
int W[4] = {0,60,100,120};
int f
[V];
//memset(f,0,sizeof(int)*N*V);
for(int i=0;i<=V;i++)
f[0][i] = 0;
for(int i=1;i<=N;i++)
{
f[i][0] = 0;
for(int j = 1;j<=V;j++)
{
if(j<C[i])
f[i][j] = f[i-1][j];
else
f[i][j] = (f[i-1][j] > (f[i-1][j-C[i]]+W[i])? f[i-1][j]:(f[i-1][j-C[i]]+W[i]));
}
}
printf("value:weight: ");
for(int i=1;i<4;i++)
{
printf("%d:%d ",C[i],W[i]);
}
printf("\nThe final value is %d\n",f
[V]);
return 0;
}
运行结果: