首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

DP:poj 3628 Bookshelf 二( 0-1背包)

2012-10-28 
DP:poj 3628 Bookshelf 2( 0-1背包)【转】http://blog.csdn.net/zxy_snow/article/details/6052676?这个相当

DP:poj 3628 Bookshelf 2( 0-1背包)

【转】http://blog.csdn.net/zxy_snow/article/details/6052676

?

这个相当于体积和价值一样大的01背包。

?

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
#include <limits.h>
using namespace std;
int w[1000002],bag[20000005];
int main(void)
{
?int n,c;
?while( scanf("%d %d",&n,&c)!=EOF? )
?{
??int sum = 0;
??for(int i=1; i<=n; i++)
??{
???scanf("%d",&w[i]);
???sum += w[i];
??}
??for(int i=1; i<=c; i++)
???bag[i] = 0;
??for(int i=1; i<=n; i++)
???for(int k=sum; k>=w[i]; k--)
???{
????if( bag[k] < bag[k-w[i]] + w[i] )
?????bag[k] = bag[k-w[i]] + w[i];
???}
??int min = INT_MAX;
??for(int i=c; i<=sum; i++)
??{
???if( bag[i] >= c && bag[i] - c < min )
????min = bag[i] - c;
??}
??cout << min << endl;
?}
return 0;
}

热点排行