题意叙述:总共有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[N][T_room]);
}
return 0;
}
这个空间复杂度为o(NV),时间复杂度也为o(NV)
一组数据
5 10
6 4
5 6
4 5
3 2
6 2
输出每一次的情况。