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