01背包

题意叙述:总共有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


输出每一次的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值