题解 | #称砝码#

称砝码

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")
全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务