noip2001 装箱问题 (01背包)

来源:互联网 发布:西门子300plc编程软件 编辑:程序博客网 时间:2024/05/22 02:02

A1133. 装箱问题
时间限制:1.0s   内存限制:256.0MB  
总提交次数:1096   AC次数:404   平均分:56.26
将本题分享到:
      
   
查看未格式化的试题   提交   试题讨论
试题来源
  NOIP2001 普及组
问题描述
  有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
  要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入格式
  第一行为一个整数,表示箱子容量;
  第二行为一个整数,表示有n个物品;
  接下来n行,每行一个整数表示这n个物品的各自体积。
输出格式
  一个整数,表示箱子剩余空间。
样例输入
24
6
8
3
12
7
9
7
样例输出
0


    解析:01背包问题。

    代码:

    #include<cstdio>const int maxn=20000;bool f[maxn+10];void work(){  int v,n,i,j,k;  scanf("%d%d",&v,&n);  for(f[0]=i=1;i<=n;i++)    {      scanf("%d",&k);      for(j=v-k;j>=0;j--)if(f[j])f[j+k]=1;    }  for(i=v;i>=0;i--)if(f[i])    {  printf("%d\n",v-i);  return 0;}  }



    0 0
    原创粉丝点击