0-1背包

来源:互联网 发布:量化投资 数据库 编辑:程序博客网 时间:2024/05/18 02:17
#include<stdio.h>#include<stdlib.h>int m,n;int c[100][100];void knapsack(int m,int n,int w[],int v[]){int i,j;for(i=0;i<n+1;i++)c[i][0]=0;for(j=0;j<m+1;j++)c[0][j]=0;for(i=1;i<n+1;i++)for(j=1;j<m+1;j++){if(w[i-1]<=j){if(c[i-1][j]<(c[i-1][j-w[i-1]]+v[i-1]))c[i][j]=c[i-1][j-w[i-1]]+v[i-1];elsec[i][j]=c[i-1][j];}elsec[i][j]=c[i-1][j];}int x[100]={0};for(i=n;i>0;i--){if(c[i][m]>c[i-1][m]){x[i-1]=1;m-=w[i-1];}}for(i=0;i<n;i++)printf("%d ",x[i]);printf("\n");}int main(){int m,n;int i,j;scanf("%d%d",&m,&n);int w[20],v[20];for(int i=0;i<n;i++)scanf("%d%d",&w[i],&v[i]);knapsack(m,n,w,v);for(i=0;i<n+1;i++){for(j=0;j<m+1;j++)printf("%2d ",c[i][j]);printf("\n");}printf("the most value is:%d\n",c[n][m]);system("pause");return 0;}

0 0