| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 443 人关注过本帖
标题:我的这个程序什么地方有问题,急!!!!!!!!
只看楼主 加入收藏
shuishui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-9-23
收藏
 问题点数:0 回复次数:2 
我的这个程序什么地方有问题,急!!!!!!!!

这是01背包问题,2级指针的动态分配内存是不是不怎么对 #include<iostream.h> #include<malloc.h>

min(int x,int y) { return(x<y? x:y); } max(int x,int y) { return(x>y? x:y); }

void Knapsack(int *v,int *w,int c,int n,int **m) { int i,j; int jMax=min(w[n]-1,c); for(j=0;j<=jMax;j++) m[n][j]=0; for(j=w[n];j<=c;j++) m[n][j]=v[n];

for(i=n-1;i>1;i--) { jMax=min(w[i]-1,c); for(j=0;j<=jMax;j++) m[i][j]=m[i+1][j]; for(j=w[i];j<=c;j++) m[i][j]=max(m[i+1][j],m[i+1][j-w[i]]+v[i]); } m[1][c]=m[2][c]; if(c>=w[1]) m[1][c]=max(m[1][c],m[2][c-w[1]]+v[1]); }

void Traceback(int **m,int *w,int c,int n,int *x) { for(int i=1;i<n;i++) if(m[i][c]==m[i+1][c]) x[i]=0; else { x[i]=1; c-=w[i]; } x[n]= (m[n][c])?1:0; }

void main() { int c,n; int *v,*w,*x,**m; int i,j; cout<<"输入背包容量c: "; cin>>c; cout<<"输入物品件数n: "; cin>>n; v=new int[n]; w=new int[n]; x=new int[n]; m=new int *[n]; for(i=1;i<n+1;i++) m[i]=new int[c];

cout<<"输入N个物品的价值:"<<endl; cin>>v[i]; for(i=0;i<n;i++) cout<<"输入N个物品的重量:"<<endl; for(i=0;i<n;i++) cin>>w[i]; cout<<endl; Knapsack(v,w,c,n,m); Traceback(m,w,c,n,x); for(i=0;i<n;i++) { for(j=0;j<n;j++) cout<<m[i][j]; cout<<endl; } for(i=0;i<n;i++) cout<<x[i]; delete [n]v; delete [n]w; delete [n]x; {for (i = 0; i < n+1; i++) delete [c] m[i]; delete [n]m;} }

[此贴子已经被作者于2005-10-15 11:25:34编辑过]

搜索更多相关主题的帖子: include return 背包 动态 
2005-10-14 14:20
凌云
Rank: 1
等 级:新手上路
威 望:1
帖 子:78
专家分:0
注 册:2005-9-17
收藏
得分:0 
c++里动态分配内存为什么不用new和delete语句呢

2005-10-14 14:28
shuishui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-9-23
收藏
得分:0 
还是有问题,是撒子意思嘛,郁闷
2005-10-15 11:26
快速回复:我的这个程序什么地方有问题,急!!!!!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014644 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved