/* 看了评论区,都不行,这才是动态规划解题 */ #include <iostream> #include <vector> using namespace std; int stamp[] = {8,8,8,8,8, 10,10,10,10, 18,18,18,18,18,18}; int main() { vector<int> dp(189, 0); dp[0] = 1; for (int i = 0; i < sizeof(stamp) / sizeof(int); i++) { for (int j = 188; j >= stamp[i]; j--) { if (dp[j - stamp[i]] != 0) { dp[j]++; } } } int sum = 0; for (int i = 1; i < dp.size(); i++) { if (dp[i] != 0) sum++; } cout << sum << endl; return 0; } // 64 位输出请用 printf("%lld") /* */