Esther


私信TA

用户名:uq_87513077221

访问量:849

签 名:

等  级
排  名 3991
经  验 1718
参赛次数 0
文章发表 13
年  龄 20
在职情况 学生
学  校 nj
专  业 物联网工程

  自我简介:

解题思路:

注意事项:解疑!!!!

参考代码:


01背包算法的二维数组求解具体代码如下:


#include <stdio.h>

int Max(int a,int b)

{

    if(a>b)

        return a;

    else

        return b;

}

int main()

{

    int f[26][10000]={0};

    int v[26]={0};

    int w[26]={0};

int N,m;

scanf("%d%d",&N,&m);

for(int i=1;i<=m;i++)

scanf("%d %d",&v[i],&w[i]);

int i,j;

for(i=1;i<=m;i++)

{

for(j=1;j<=N;j++)

{

if(v[i]>j){

f[i][j]=f[i-1][j];

}

else

{

f[i][j]=Max(f[i-1][j],f[i-1][j-v[i]]+(v[i]*w[i]));

}

}

}

printf("%d\n",f[m][N]);

return 0;

}


01背包算法的一维数组求解具体代码如下:


#include <stdio.h>

int Max(int a,int b)

{

    if(a>b)

        return a;

    else

        return b;

}

int main()

{

    int bp[10000]={0};//初始化bp

    //注意:定义数组bp内的值的个数应尽可能的大,否则会出现错误

    int v[100],p[100];//v表示该物品的价格(v<=10000),p表示该物品的重要度(1~5)

int N,m;//N(<30000)表示总钱数,m(<25)为希望购买物品的个数。

scanf("%d %d",&N,&m);

for(int i=1;i<=m;i++)

scanf("%d%d",&v[i],&p[i]);

int i,j;

//01背包算法,优化后的一维数组

for(i=0;i<=m;i++)

{

for(j=N;j>=v[i];j--)

{

bp[j]=Max(bp[j],bp[j-v[i]]+(v[i]*p[i]));

}

}

printf("%d\n",bp[N]);

return 0;

}

如果把01背包算法部分用函数表示,提交是正确的,但是,我不懂为什么放在主函数里面就有错误了。(刚学习的01算法可能存在我没有发现的错误)

在线编辑的时候,运行正确,可是代码提交说是运行错误,各位大佬帮忙看看具体是什么问题,谢谢!

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区