不要62 數字dp,函式內外定義陣列的初始值

2022-08-19 14:24:10 字數 1906 閱讀 7436

杭州人稱那些傻乎乎粘嗒嗒的人為62(音:laoer)。

杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。

不吉利的數字為所有含有4或62的號碼。例如:

62315

73418

88914

都屬於不吉利號碼。但是,61152雖然含有6和2,但不是62連號,所以不屬於不吉利數字之列。

你的任務是,對於每次給出的乙個牌照區間號,推斷出交管局今次又要實際上給多少輛新的士車上牌照了。

input

輸入的都是整數對n、m(

01000000

),如果遇到都是0的整數對,則輸入結束。

output

對於每個整數對,輸出乙個不含有不吉利數字的統計個數,該數值佔一行位置。

sample input

110000

sample output

80

列舉肯定是不行的 ,數字太多 ,會超時

所以用dp遞推出以i為首位,位數為j的數字個數dp[i][j]並儲存,以空間降低時間

遞推過程,高位dp為低位各dp的和,並判斷4和62的情況

for (int j=1; j<=9; j++)

else

for (int k=0;k<=9;k++)dp[i][j]+=dp[k][j-1

]; }

}或 更簡單的

(在函式外定義dp[

10][10

]) dp[

0][0] = 1

;

for (int i = 1; i <= 7; ++i)

for (int j = 0; j <= 9; ++j)

for (int k = 0; k <= 9; ++k) ,k,i=0

;

long

long ans=0

;

while

(x)

for (int j=i;j>=1;j--)

if(a[j]==4||a[j]==2&&a[j+1]==6)break

; }

//printf("%d-%lld\n",x,ans);

return

ans;

}

(因為隨機值的問題,剛開始沒有寫a=,結果a正好隨機為6)

#include#define ll long long

using

namespace

std;

ll dp[

10][10

];long

long solve(int

x),k,i=0

;

long

long ans=0

;

while

(x)

for (int j=i;j>=1;j--)

if(a[j]==4||a[j]==2&&a[j+1]==6)break

; }

//printf("%d-%lld\n",x,ans);

return

ans;

}int

main()

else

for (int k=0;k<=9;k++)dp[i][j]+=dp[k][j-1

];//

printf("dp %d %d %lld\n",i ,j ,dp[i][j]);

} }

intn,m;

while(scanf("

%d%d

",&n,&m)!=eof&&(m||n))

return0;

}

DP 數字 DP 不要62

水一篇題解。掌握了數字 dp 的套路之後,10分鐘就可敲出這道題目。題目 不要62 做法 動態規劃 狀態表示 f i j f i j f i j 表示 i ii 位數,最高位是 j jj 的合法數字個數。預處理 只要不含4並且相鄰兩位不是6 2即可累加 狀態轉移步驟 1 不選最大可填數時 累加 2 ...

不要62(數字DP)

description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 73...

不要62 (數字dp)

杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 62315 73418 88914 都屬...