【演算法】1分2分5分的硬幣,組成1角,共有多少種組合
阿新 • • 發佈:2019-02-10
1*x + 2*y + 5*z = 10
解法一:暴力列舉法
void main(){
int n = 0;
// 5分硬幣最多有i個
for (int i=0; i<3; i++)
{
// 2分硬幣最多有10-5*i個
for (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;
}