P2677
看数据范围
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m, h[25], dp[10005], sum=0;
signed main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
{
cin>>h[i];
sum+=h[i];
}
for(int i=1; i<=n; i++)
{
for(int j=sum; j>=h[i]; j--)
{
dp[j]=max(dp[j], dp[j-h[i]]+h[i]);
}
}
for(int i=1; i<=sum; i++)
{
if(dp[i]>=m)
{
cout<<dp[i]-m;
return 0;
}
}
return 0;
}
dp开10005能过!!!!!!!!!!!!!!!!
(而且dp时间也会超!!!!!用dp能过!!!!!)