题解 | #称砝码#
称砝码
https://www.nowcoder.com/practice/f9a4c19050fc477e9e27eb75f3bfd49c
/*
HW深搜1 称砝码
*/
#include <bits/stdc++.h>
using namespace std;
int n;
int w[11];
int nums[11];
int sum = 0;
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> w[i];
}
for (int i = 0; i < n; i++) {
cin >> nums[i];
sum += nums[i] * w[i];
}
bool dp[sum+1];
for(int i=0;i<sum+1;i++)dp[i]=false;
dp[0]=true;
for(int i=0;i<n;i++){
for(int j=0;j<nums[i];j++){
for(int k=sum;k>=w[i];k--){
if(dp[k-w[i]])dp[k]=true;
}
}
}
int ans=0;
for(int i=0;i<sum+1;i++){
if(dp[i])ans++;
}
cout<<ans;
}
// 64 位输出请用 printf("%lld")