多重背包问题,谢谢各位了

heartzhizi 2013-04-30 05:58:48
3 多重背包问题
3.1 题目
有N 种物品和一个容量为V 的背包。第i 种物品最多有Mi 件可用,每件耗费的
空间是Ci,价值是Wi。求解将物品装入背包可使这些物品的耗费的空间总和不超
过背包容量,且价值总和最大,输出最大价值总和。
动态方程为f[i][j]=max{f[i-1][j-k*v[i]]+k*w[i]}其中(0=<k<=Mi)
我用一维数组存储的

#include<stdio.h>
#define N 20
int main()
{
int n,i,j,w[N],v[N],m[N],f[1000],V;
scanf("%d",&V); //包的容量
scanf("%d",&n); //有几种物品
for(i=1;i<=n;i++)
scanf("%d%d%d",v[i],w[i],m[i]);//物品的所占容积大小,价值,有几件

for(i=0;i<=V;i++)//初始化
f[i]=0;

for(i=1;i<=n;i++)
{
if(v[i]*m[i]>=V) //完全背包
{
for(j=1;j<v[i];j++)
f[j]=f[j-1];
for(j=v[i];j<=V;j++)
{
if(f[j]<f[j-v[i]]+w[i])
f[j]=f[j-v[i]]+w[i];
}

}//if

else //01背包
{
int k=0;
while(k<=m[i])
{

for(j=V;j>=v[i];j--)
if(f[j]<f[j-v[i]]+w[i])
f[j]=f[j-v[i]]+w[i];

k++;
} //while


} //else

} //for
printf("%d\n",f[V]);

getchar();
getchar();
return 0;

}
我是dev c++的编译器,只说错了,不告诉错在哪里了,麻烦谁有这个编译器发过来,我之前下个一个还是本能用,万分感谢了!嘻嘻嘻。。。

...全文
228 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
heartzhizi 2013-05-04
  • 打赏
  • 举报
回复
谢谢了,dp真心不好弄。。。
折翼断JJ 2013-05-03
  • 打赏
  • 举报
回复
编译一个括号错误
      }//if  
改一下括号就可以编译了。
heartzhizi 2013-04-30
  • 打赏
  • 举报
回复
拜托大家了,帮忙找找错误呀

70,022

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧