首页 > 代码库 > 华为机试—物品放箩筐(高级题160分,含体积价值:贪心算法)
华为机试—物品放箩筐(高级题160分,含体积价值:贪心算法)
#include <iostream> using namespace std; int m[100][100]; int min(int a,int b) { return (a<b)?a:b; } int max(int a,int b) { return (a>b)?a:b; } void knapsack(int v[],int w[],int c,int n) { int jMax=min(w[n],c); for(int j=0;j<=jMax;j++) m[n][j]=0; for(j=w[n];j<=c;j++) m[n][j]=v[n]; for(int i=n-1;i>1;i--) { jMax=min(w[i],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[2][c],m[2][c-w[1]]+v[1]); } void trace(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=100,v[3],t[3],x[3]; //cout<<"输入体积:"<<endl; for(int i=1;i<=3;i++) cin>>t[i]; //cout<<"输入价值:"<<endl; for(i=1;i<=3;i++) cin>>v[i]; knapsack(v,t,100,3); trace(t,100,3,x); int vsum=0; for(i=1;i<=3;i++) vsum+=v[i]*x[i]; cout<<vsum<<endl; }
华为机试—物品放箩筐(高级题160分,含体积价值:贪心算法)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。