1. 程式人生 > >【演算法】1分2分5分的硬幣,組成1角,共有多少種組合

【演算法】1分2分5分的硬幣,組成1角,共有多少種組合

1*x + 2*y + 5*z = 10

解法一:暴力列舉法

void main(){
  int n = 0;
  // 5分硬幣最多有i個
  for (int i=0; i<3; i++)
  {
      // 2分硬幣最多有10-5*ifor (int j=0; j<=(10-5*i)/2; j++)
      {
          // 1分硬幣的個數
          for (int k=0; k<= 10 - 5*i - 2*j; k++)
          {
              if (10 == 5*i + 2*j +k)
              {
                  n++;
                  cout << "1分:"
<<k<<"個 "<< "2分:"<<j<<"個 "<< "5分:"<<i<<"個 " << endl; } } } } cout << "所有組合有 = " <<n<<“ 種”<<endl; }

解法二:揹包問題

int main()
{
    int weight[] = {1,2,5};
    dp[0] = 1;
    for(int i=0; i<3
; i++){ for(int j=weight[i]; j<=10; j++){ dp[j] += dp[j - weight[i]]; } } cout << "dp=" <<dp[10]<< endl; return 0; }