POJ 3628 Bookshelf 2(背包)

来源:互联网 发布:苹果7铃声下载软件 编辑:程序博客网 时间:2024/05/01 20:45

刚开始看到题目发现数据竟然这么大,然后一直在找解决方法,最后竟然不用考虑,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);}}