fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. const int MAX_N = 101;
  6. const int MAX_K = 101;
  7.  
  8. int dp[101][101];
  9.  
  10. int countWaysToMakeChange(int S, int K, int denominations[]) {
  11. for (int i = 0; i <= S; ++i) {
  12. for (int j = 0; j < K; ++j) {
  13. dp[i][j] = 0;
  14. }
  15. }
  16.  
  17. for (int i = 0; i < K; ++i) {
  18. dp[0][i] = 1;
  19. }
  20.  
  21. for (int i = 1; i <= S; ++i) {
  22. for (int j = 0; j < K; ++j) {
  23. int include{};
  24. int exclude{};
  25.  
  26. if (i >= denominations[j]) {
  27. include = dp[i - denominations[j]][j];
  28. }
  29.  
  30. if (j >= 1) {
  31. exclude = dp[i][j - 1];
  32. }
  33.  
  34. dp[i][j] = (include + exclude) % 1000000007;
  35. }
  36. }
  37.  
  38. return dp[S][K - 1];
  39. }
  40.  
  41. int main() {
  42. int S, K;
  43. cin >> S >> K;
  44.  
  45. int denominations[MAX_K];
  46. for (int i = 0; i < K; ++i) {
  47. cin >> denominations[i];
  48. }
  49.  
  50. int ways = countWaysToMakeChange(S, K, denominations);
  51. cout << ways << endl;
  52.  
  53. return 0;
  54. }
Success #stdin #stdout 0.01s 5268KB
stdin
Standard input is empty
stdout
0