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; }

浙公网安备 33010602011771号