贪心算法胖老鼠问题



#include<iostream.h> 
#define max 100 //最多物品数 
void sort (int n,float a[max],float b[max]) //按价值密度排序 
{ 
int j,h,k; 
float t1,t2,t3,c[max]; 
for(k=0;k<=n;k++) 
c[k]=a[k]/b[k]; 
for(h=0;h<n;h++) 
for(j=0;j<=n-h;j++) 
if(c[j]<c[j+1]) 
{t1=a[j];a[j]=a[j+1];a[j+1]=t1; 
t2=b[j];b[j]=b[j+1];b[j+1]=t2; 
t3=c[j];c[j]=c[j+1];c[j+1]=t3; 
} 
} 
//---------------------------------
int knapsack(int n,float limitw,float v[max],float w[max],int x[max]) 
{float c1; //c1为剩余可装载重量 
int i; 
sort(n,v,w); //物品按价值密度排序 
c1=limitw; 
for(i=0;i<=n;i++) 
{ 
if(w[i]>c1)break; 
x[i]=1; //x[i]为1时,物品i在解中 
c1=c1-w[i]; 
} 
return c1;} 
//-------------------------------
void main() 
{int n,i,x[max],j; 
float totalv=0,totalw=0,limitw; 
//---赋值----
n=3;
limitw=5; 
for(i=0;i<=(n-1);i++) 
x[i]=0; 
//---赋值---------
float v[3]={7,4,5};
float w[3]={2,3,2};//猫粮

j=knapsack (n,limitw,v,w,x); 
cout<<endl<<"the selection is:"; 
for(i=0;x[i]==1;i++) 
{ 
    cout<<endl<<"取出的重量"<<v[i]<<"猫粮"<<w[i]<<"单位价值"<<v[i]/w[i]; 

	totalw=totalw+w[i]; 
    totalv=totalv+v[i];

} 
//----------------------

totalv=totalv+j*v[i]/w[i];

  
    cout<<endl<<"取出的重量"<<j*v[i]/w[i]<<"猫粮"<<j<<"单位价值"<<v[i]/w[i]; 

cout<<endl<<"胖老鼠能换取到的食物的最大数量:"<<totalv<<endl; //背包的总价值 
} 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值