2023年12月 华为机试题 C++ 第三题 菜单组合种类

第三题:菜单组合种类。为了科学饮食,控制每天摄入的卡路里数。最低值应不低于kcal_low, 最高值应不高于kcal_high。现在给出n个菜品的卡路里数,菜品可以重复选择。为满足总共摄入的卡路里数在规定的区间,可以有多少种菜品选择方式?

输入:kcal_low kcal_high

n

n行,表示每个菜品的卡路里数。

输出:所有合理的菜品组合方式数量。

例:输入350 500

3

100

200

500

输出:7

解释:500*1,200*2,200*1+100*2,200*2+100*1,100*4,100*3+200,100*5共7种选择。

思路:背包+dp

#include <iostream>
#include <vector>
using namespace std;

int main() {
    int klow, khigh;
    cin>>klow>>khigh;
    int n;
    cin>>n;
    vector<int> k(n);
    for (int i = 0; i < n; i++) {
        cin>>k[i];
    }
    int res = 0;
    vector<int> dp(khigh + 1, 0);
    dp[0] = 1;
    for (int i = 0; i < n; i++) {
        for (int j = k[i]; j <= khigh; j++) {
            dp[j] += dp[j - k[i]];
        }
    }
    for (int i = klow; i <= khigh; i++) {
        res += dp[i];
    }
    cout<<res<<endl;
    return 0;
}

 

posted @ 2024-03-31 12:14  宇宙之母蔡依林  阅读(11)  评论(0)    收藏  举报