#include<iostream>
using namespace std;
const int N=40;
const int M=4e5;
const int INF=0x3f3f3f3f;
int a[N];
int dp[N][M];
//dp[i][j]:从前i个物品选择,选择出的物品总价值大于等于j,构成一个集合,从集合中选择最小值
//ans=dp[n][x]
int n,x;
int main()
{
cin>>n>>x;
for(int i=1;i<=n;i++)
cin>>a[i];
dp[0][0]=0;
for(int i=1;i<M;i++)
dp[0][i]=INF;
//从前0个选择,不可能超过0,因此设置为不可能
for(int i=1;i<=n;i++)
for(int j=1;j<M;j++)
{
dp[i][j]=dp[i-1][j];
int tmp;
if(j>=a[i])
tmp=dp[i-1][j-a[i]]+a[i];
else
tmp=a[i];
dp[i][j]=min(dp[i][j],tmp);
}
cout<<dp[n][x]<<endl;
}
CSP认证202209-2:何以包邮
最新推荐文章于 2023-10-25 00:26:17 发布