#include <iostream>
//#include <math.h>
using namespace std;
int main(){
// coin n 动态规划
// 1. %2==0 /2
// 2. %3==0 /3
// 3. -1
int dp[100];
dp[0]=0;dp[1]=1;dp[2]=2;
for(int i=3;i<100;i++){
if(i%3==0 && i%2==0){
dp[i]= min(dp[i/3],dp[i/2])+1;
}else if(i%3==0){
dp[i] = min(dp[i/3],dp[i-1])+1;
}else if(i%2==0){
dp[i] = min(dp[i/2],dp[i-1])+1;
}else{
dp[i]=dp[i-1]+1;
}
}
int n,coin;
cin>>n;
while(n--){
cin>>coin;
cout<<dp[coin]<<endl;
}
//test
// cout<<dp[3]<<endl;
// cout<<dp[9]<<endl;
// cout<<dp[11];
return 1;
}
[算法导论] 金币消费 动态规划
最新推荐文章于 2022-04-19 12:36:03 发布
本文深入探讨了如何利用动态规划解决金币消费问题。通过建立数学模型,我们分析了不同消费策略,并给出求解最优解的算法步骤,帮助读者理解动态规划在解决这类问题中的应用。
摘要由CSDN通过智能技术生成