杭州人稱那些傻乎乎粘嗒嗒的人為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 longusing
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 都屬...