列表

详情


XM30. 小米大礼包

描述

小米之家是成人糖果店。里面有很多便宜,好用,好玩的产品。中秋节快到了,小米之家想给米粉们准备一些固定金额大礼包。对于给定的一个金额,需要判断能不能用不同种产品(一种产品在礼包最多出现一次)组合出来这个金额。聪明的你来帮帮米家的小伙伴吧。

输入描述

输入 N (N 是正整数, N <= 200)
输入 N 个价格p(正整数, p <= 10000)用单空格分割
输入金额 M(M是正整数,M <= 100000 )

输出描述

能组合出来输出 1
否则输出 0

示例1

输入:

6
99 199 1999 10000 39 1499
10238

输出:

1

原站题解

C++ 解法, 执行用时: 3ms, 内存消耗: 504KB, 提交时间: 2020-07-28

#include <bits/stdc++.h>
using namespace std;
int p[205];
bitset<100001> dp(0);
int main()
{
    int n, m;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", p + i);
    scanf("%d", &m);
    dp[0] = 1;
    for (int i = 0; i < n; i++)
        dp |= dp << p[i];
    cout << dp[m] << endl;
    return 0;
}

C++ 解法, 执行用时: 4ms, 内存消耗: 480KB, 提交时间: 2020-08-18

#include <bits/stdc++.h>
using namespace std;
    
int p[205];
bitset<100001> dp(0);
    
int main()
{
    int n, m;
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        scanf("%d", p + i);
    scanf("%d", &m);
    dp[0] = 1;
    for (int i = 0; i < n; i++)
        dp |= dp << p[i];
    cout << dp[m] << endl;
    return 0;
}

上一题