简单的0-1背包问题,使用动态规划的算法。
#include <iostream>
#include "stdio.h"
#include "stdlib.h"
using namespace std;
int m[10][10];
int p[10];//价值
int w[10];//重量
void backpack(int n,int c)
{
for(int i=0; i<10; i++)
{
m[0][i]=0;
m[i][0]=0;
}
for(int i=1; i<=n; i++)
{
for(int j=1; j<=c; j++)
{
if (j<w[i])
m[i][j]=m[i-1][j];
if (j>=w[i])
{
if (m[i-1][j]>=m[i-1][j-w[i]]+p[i])
m[i][j]=m[i-1][j];
else
{
m[i][j]=m[i-1][j-w[i]]+p[i];
}
}
}
}
}
int main()
{
int n;//物品数
int c;//容量
printf("输入物品数量及背包容量:\n");
scanf("%d %d",&n,&c);
printf("输入物品价值与重量:\n");
for(int i=1; i<=n; i++)
{
scanf ("%d %d",&p[i],&w[i]);
}
backpack(n,c);
printf("最大价值:%d",m[n][c]);
return 0;
}
/*测试数据
4 5
12 2
10 1
20 3
15 2*/
来源:CSDN
作者:Trae_Young
链接:https://blog.csdn.net/weixin_44086112/article/details/103699278