1 条题解
-
6
这个题目的数据范围特别小,,那么最大只会出现 ,够开一个映射数组了,那么我们只要用 01 背包看一看与 最接近的能拼出来的数是多少即可。
代码:
#include<bits/stdc++.h> using namespace std; long long n,k,a[55],dp[50005],maxx=50000000,ans; int main(){ //freopen("close.in","r",stdin); //freopen("close.out","w",stdout); cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); dp[0]=1; for(int i=1;i<=n;i++){ for(int j=50000;j>=a[i];j--){ if(dp[j-a[i]]=1) dp[j]=1; } } for(int i=1;i<=50000;i++){ if(dp[i]==1&&abs(k-i)<=maxx){ maxx=abs(k-i); ans=i; } } cout<<ans; return 0; }
我给这份代码加了几个 bug,切忌 Ctrl+C/V
- 1
信息
- ID
- 784
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 51
- 已通过
- 7
- 上传者