题解 | 01背包前置题
01背包前置题
https://www.nowcoder.com/practice/c227e9845d714ca6a27c86f1f9db0ee4
#include <iostream>
using namespace std;
const int N = 1e3 + 10;
int a[N];
int f[N][N];
int main() {
int n,k;
cin>>n>>k;
for(int i = 1;i <= n;i++) cin>>a[i];
f[0][0] = 1;
for(int i = 1;i <= n;i++){
for(int j = 0;j <= k;j++){
f[i][j] = f[i - 1][j];
if(j >= a[i]){
f[i][j] = max(f[i][j],f[i - 1][j - a[i]]);
}
}
}
if(f[n][k]){
cout<<"Yes";
}else{
cout<<"No";
}
}
// 64 位输出请用 printf("%lld")
查看10道真题和解析