#include<bits/stdc++.h>
using namespace std;
int n,m;
signed main()
{
cin>>n>>m;
vector<int>w(n);
for(int i=0;i<n;i++)
cin>>w[i];
vector<int>f(m+1,0);
for(int i=0;i<n;i++)
for(int v=m;v>=w[i];v--)
f[v]=max(f[v-w[i]]+w[i],f[v]);
cout<<f[m]<<endl;
return 0;
}
/*
5 10
7 2 6 5 4
*/
//我是用数组+动规过的
//代码见下
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100005],dp[100005],ans=0;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
if(j>=a[i])
dp[j]=max(dp[j],dp[j-a[i]]+a[i]);
cout<<dp[m];
return 0;
}
上面的是AC的
#include<bits/stdc++.h>
using namespace std;
long long n,m,w[25],f[25000000];
signed main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<=n;i++)
for(int v=m;v>=w[i];v--)
f[v]=max(f[v-w[i]]+w[i],f[v]);
cout<<f[m]<<endl;
return 0;
}
/*
5 10
7 2 6 5 4
*/
```这是WA的