您的位置:首页 > 其它

POJ 3628 Bookshelf 2(背包)

2013-04-22 19:49 417 查看
刚开始看到题目发现数据竟然这么大,然后一直在找解决方法,最后竟然不用考虑,poj的数据很小.

太坑爹了.

#include <iostream>
#include <cstdio>
#include <memory.h>
#include <algorithm>
using namespace std;
const int maxn=20000001;
int dp[maxn],t[21],n,b;
int main(){
while (scanf("%d%d",&n,&b)==2){
int maxv=0,s=0;
for (int i=0;i<n;++i){
scanf("%d",&t[i]);
s+=t[i];
}
sort(t,t+n);
for (int i=0;i<n;++i){
for (int j=s;j>=t[i];--j){
dp[j]=dp[j-1];
if(dp[j-1]<dp[j-t[i]]+t[i]){
dp[j]=dp[j-t[i]]+t[i];
}
}
}
int ans=20000001;
for (int i=0;i<=s;++i){
if(dp[i]>=b&&dp[i]-b<ans){
ans=dp[i]-b;
}
}
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: