栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

01背包问题(动态规划法,C语言)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

01背包问题(动态规划法,C语言)

#include
int Max(int n1,int n2){
    if(n1>n2){
        return n1;
    }
    return n2;
}
int main(){
    int n=6,c=12;
    int value[]={0,6,3,5,4,3,6};
    int weight[]={0,4,6,2,2,5,3};
    int m[n+1][c+1];
    for(int i=0;i<=n;i++){
        for(int j=0;j<=c;j++){
            m[i][j]=0;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=c;j++){
            if(j>=weight[i]){
                m[i][j]=Max(m[i-1][j],m[i-1][j-weight[i]]+value[i]);
            }else{
                m[i][j]=m[i-1][j];
            }
        }
    }
    printf("背包物品总价值最大为:%dn",m[n][c]);
    int trace[n+1];
    for(int i=n;i>=1;i--){
        if(c<0){
            printf("errorn");
            break;
        }
        if(m[i][c]==m[i-1][c]){
            trace[i]=0;
        }else{
            trace[i]=1;
            c-=weight[i];
        }
    }
    printf("此时背包内物品有(1表示有,0表示没有,从左到右依次为第i个物品状态):n");
    for(int i=1;i<=n;i++){
        printf("%dt",trace[i]);
    }
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346752.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号