【♂Not The Triumph♂O(∩_∩)O哈哈~But The Struggle♂】

竞赛决不是捷径,它只是另一种艰辛的生活方式。得到与失去,只有时间会去评判;成功与失败,只有历史能去仲裁。我不会永远成功,正如我不会永远失败一样

  C++博客 :: 首页 :: 联系 ::  :: 管理
  6 Posts :: 239 Stories :: 25 Comments :: 0 Trackbacks

常用链接

留言簿(7)

我参与的团队

搜索

  •  

积分与排名

  • 积分 - 108444
  • 排名 - 229

最新评论

阅读排行榜

评论排行榜

[问题描述]
有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从 n 个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
[样例]
输入:
24      一个整数,表示箱子容量
6       一个整数,表示有n个物品
8       接下来n行,分别表示这n个物品的各自体积。
3
12
7
9
7

输出:        
0(一个整数,表示箱子剩余空间)

【参考程序】:

#include<cstring>
#include
<cstdio>
#include
<iostream>
using namespace std;

bool bo[20010];
int w[40];
int v,n;
int main()
{
    scanf(
"%d",&v); scanf("%d",&n);
    
for (int i=1;i<=n;i++) scanf("%d",&w[i]);
    
for (int i=1;i<=v;i++) bo[i]=false;
    bo[
0]=true;
    
for (int i=1;i<=n;i++)
        
for (int j=v;j>=w[i];j--)
            bo[j]
=bo[j] || bo[j-w[i]];
    
int m=v;
    
while (!bo[m]) m--;
    printf(
"%d\n",v-m);
    
return 0;
}
posted on 2009-08-26 15:30 开拓者 阅读(748) 评论(2)  编辑 收藏 引用 所属分类: NOIP历届题目

Feedback

# re: 【NOIP 2001 装箱问题】 2014-10-29 21:48 pioneer
bo[j]=bo[j] || bo[j-w[i]];读不懂请教  回复  更多评论
  

# re: 【NOIP 2001 装箱问题】 2015-07-07 09:18 路人
@pioneer
这句话就等于bo[j] ||= bo[j-w[i]];
也就是返回bo[j]和bo[j-w[i]]进行||运算的结果,
额,这里就是位运算,起到了压缩结果状态的作用。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理