西安高端網(wǎng)站建設(shè)公司seo案例分析100例
【問(wèn)題描述】
小藍(lán)有一個(gè)整數(shù),初始值為 1 ,他可以花費(fèi)一些代價(jià)對(duì)這個(gè)整數(shù)進(jìn)行變換。
小藍(lán)可以花費(fèi) 1 的代價(jià)將整數(shù)增加 1 。
小藍(lán)可以花費(fèi) 3 的代價(jià)將整數(shù)增加一個(gè)值,這個(gè)值是整數(shù)的數(shù)位中最大的那個(gè)(1 到 9)。
小藍(lán)可以花費(fèi) 10 的代價(jià)將整數(shù)變?yōu)樵瓉?lái)的 2 倍。
例如,如果整數(shù)為 16,花費(fèi) 3 將整數(shù)變?yōu)?22 。
又如,如果整數(shù)為 22,花費(fèi) 1 將整數(shù)變?yōu)?23 。
又如,如果整數(shù)為 23,花費(fèi) 10 將整數(shù)變?yōu)?46 。
請(qǐng)問(wèn),如果要將整數(shù)從初始值 1 變?yōu)?2024,請(qǐng)問(wèn)最少需要多少代價(jià)?【答案提交】
這是一道結(jié)果填空的題,你只需要算出結(jié)果后提交即可。本題的結(jié)果為一個(gè)整數(shù),在提交答案時(shí)只填寫(xiě)這個(gè)整數(shù),填寫(xiě)多余的內(nèi)容將無(wú)法得分。
#include <iostream> #include <algorithm> #include <cstring>using namespace std;int max_digit(int n) {int res=0;while(n){res=max(res,n%10);n/=10;}return res; }//分離數(shù)位,返回最大值 int dp[5000]; int main() {//dp[n]:花費(fèi)// n:變化的值memset(dp,0x3f,sizeof dp);dp[1]=0;//初始條件:dp=maxfor(int i=1;i<=2050;i++){//反復(fù)遍歷更新,取各自最小值即為最小花費(fèi)//邏輯命題dp[i+1]=min(dp[i+1],dp[i]+1);// dp:0 1 2 3 ... // n:1 2 3 4 ...//花費(fèi) 1:累加即可//確定為:dp[2]=1dp[i+max_digit(i)]=min(dp[i+max_digit(i)],dp[i]+3);// dp:0 3/1 6/3 ... // n:1 2 4 ...//確定為:dp[2]=1(更新)dp[2*i]=min(dp[2*i],dp[i]+10);//花費(fèi) 10://0 10/1/3 ...//1 2 4 8 16//確定為:dp[2]=1(更新)}for(int i=0;i<2025;i++) cout<<dp[i]<<" ";//調(diào)試打印代碼cout<<endl<<dp[2024]<<endl;return 0; }