求大神给一份C语言01背包的代码,要每一行都有注释,谢谢!

没有注释看不懂,如果还能能有一点点讲解就最好了,谢谢!#include<stdio.h>#include<string.h>intf[1010],w[1010],v[10... 没有注释看不懂,如果还能能有一点点讲解就最好了,谢谢!
#include <stdio.h>
#include <string.h>

int f[1010],w[1010],v[1010];

int max(int x,int y)
{
if(x>y) return x;
else return y;
}

int main()
{
int t,m,i,j;
memset(f,0,sizeof(f));
scanf("%d %d",&t,&m);
for (i=1;i<=m;i++)
scanf("%d %d",&w[i],&v[i]);
for (i=1;i<=m;i++)
{
for (j=t;j>=w[i];j--)
{
if(w[i]<=t)
f[j]=max(f[j-w[i]]+v[i],f[j]);
}
}
printf("%d",f[t]);
printf("\n");

getch();
return 0;
}

还有没有更简单的方法?求程序和注释!
展开
 我来答
百度网友9761bdf1d
2014-11-11 · TA获得超过589个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:354万
展开全部

这是一个背包问题,该算法已经是最简单的了,还有递归算法,我觉得更麻烦。对你的代码进行解释如下:

//背包问题:有m件物品和一个承重为t的背包。第i件物品的重量是w[i],价值是v[i]。
//求解将哪些物品装入背包可使这些物品的重量总和不超过背包承重量t,且价值总和最大。
#include <stdio.h>
#include <conio.h>
#include <string.h>

int f[1010],w[1010],v[1010];//f记录不同承重量背包的总价值,w记录不同物品的重量,v记录不同物品的价值

int max(int x,int y){//返回x,y的最大值
    if(x>y) return x;
    return y;
}

int main(){
    int t,m,i,j;
    memset(f,0,sizeof(f));  //总价值初始化为0
    scanf("%d %d",&t,&m);  //输入背包承重量t、物品的数目m
    for(i=1;i<=m;i++)
        scanf("%d %d",&w[i],&v[i]);  //输入m组物品的重量w[i]和价值v[i]
    for(i=1;i<=m;i++){  //尝试放置每一个物品
        for(j=t;j>=w[i];j--){
            f[j]=max(f[j-w[i]]+v[i],f[j]);
            //在放入第i个物品前后,检验不同j承重量背包的总价值,如果放入第i个物品后比放入前的价值提高了,则修改j承重量背包的价值,否则不变
        }
    }
    printf("%d",f[t]);  //输出承重量为t的背包的总价值
    printf("\n");
    getch();
    return 0;
}
辰风华文
2014-11-04 · TA获得超过263个赞
知道小有建树答主
回答量:425
采纳率:0%
帮助的人:122万
展开全部
什么意思。。说清楚一点啊。
追问
要一份01背包的代码(C语言),
要尽量每一行都有注释,明白了吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式