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
输出每一次的情况。
#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
输出每一次的情况。
相关文章推荐
- hdoj 1203 01背包变形
- POJ1745Divisibility(01背包思想)
- 01背包问题
- HDOJ 2602 Bone Collector(01背包最基本模板题)
- hdu2126-01背包
- UVA - 1627 Team them up!——二分图染色+01背包
- 01背包
- URAL1005 Stone Pile 01背包
- 算法导论学习笔记(十三):动态规划(三):01背包问题
- poj3624 简单的01背包问题
- 动态规划分析—以01背包为例
- 简单01背包 完全背包
- 01背包问题
- hdu5887(搜索解01背包+奇怪的剪枝)
- 背包问题——nyoj860 又见01背包
- Watashi's BG(01背包思想+深搜+剪枝)
- 51Nod 1007 正整数分组(01背包的变形)
- 01背包 完全背包 多重背包 二维费用背包
- 01背包中背包装满和不装满
- poj 1837 Balance (01背包变形)