您的位置:首页 > 其它

01背包

2014-12-20 17:05 204 查看
题意叙述:总共有N件物品,一个背包总空间为V,物品标号1~n,第 i 物品对应占空间room,价值weight。现向其中放入物品,问可以放入的最大价值。

#include<stdio.h>

struct bag

{

int room;

int weight;

};//room 是每一个占的空间,weight是每一个个的价值

int main()

{

struct bag arr[100];

int N,T_room;

while(scanf("%d%d",&N,&T_room)!=EOF)//N总共有多少件物品,T_room总共有多少空间

{

int i;

for(i=1;i<=N;i++)

scanf("%d%d",&arr[i].weight,&arr[i].room);

int F[11][11]={0};

int c;//c是每一件占有的空间

for(i=1;i<=N;i++)

{

for(c=arr[i].room;c<=T_room;c++)

F[i][c]=F[i-1][c]>(F[i-1][c-arr[i].room]+arr[i].weight)?F[i-1][c]:(F[i-1][c-arr[i].room]+arr[i].weight);

int j;

for(c=1;c<=T_room;c++)

printf("F[%d][%d]=%d ",i,c,F[i][c]);

printf("\n");

}

printf("%d\n",F
[T_room]);

}

return 0;

}

这个空间复杂度为o(NV),时间复杂度也为o(NV)

一组数据

5 10

6 4

5 6

4 5

3 2

6 2

输出每一次的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: