0-1背包问题 动态规划算法 C++

余生长醉 提交于 2019-12-25 16:35:11

简单的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*/
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!