hdu 3555 Bomb(數字dp初學)

2021-07-11 03:24:06 字數 2154 閱讀 7675

題意:

給定乙個n,求0到n範圍內不含49的數的個數

思路:這題是最基礎的數字dp,可模擬hdu2089 不要62,事實上,這題比不要62更簡單一些。。。

首先,還是預處理打表,用乙個二維陣列來儲存狀態,dp[i][j],表示i位的滿足狀態j的數的個數,j有三種狀態,0:不含49的,1:不含49的,但是首位是9的數,2:含有49的數。(當然0狀態包含1狀態)

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

然後是統計過程,和不要62那題類似,先拆分,按位列舉

ll slove(ll x)

bool flag = false;

a[len + 1] = 0;

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

return ans;

}

順便提一句,統計的時候沒有把本身計算進去,所以答案應該是slove(n+1)

**:

#include #include #define ll long long

ll dp[25][3];

ll a[25];

ll slove(ll x)

bool flag = false;

a[len + 1] = 0;

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

return ans;

}int main()

int t;

scanf("%d", &t);

while(t--)

return 0;

}

這裡還有一種和不要62做法完全一樣的方法,dp[i][j]表示i位的以j開頭的不含49的數的個數。slove(n+1)統計的就是0~n之間不含49的數的個數,我們要計算的0~n之間含49的數的個數就是n+1-slove(n+1)(0~n之間有n+1個數)

**:

#include #include #define ll long long

using namespace std;

ll dp[22][10];

ll a[22];

ll slove(ll x)

//printf("%d\n", l);

ll sum = 0;

bool flag = false;

a[l + 1] = 0;

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

}if(a[i] == 9 && a[i + 1] == 4)

break;

}return sum;

}int main()

}// for(int i = 1; i <= 5; i++)

//

int t;

scanf("%d", &t);

while(t--)

return 0;

}

還有一種做法,和上面的反一下,dp[i][j]表示i位的以j開頭的含49的數的個數。。。這種做法無比麻煩。。。還莫名wa了,對拍了好多資料都是對的。。。。我也把**貼出來,如果有人發現問題務必和我講一講

#include #include #define ll unsigned long long

using namespace std;

ll dp[22][10];

ll a[22];

ll s[22];

ll slove(ll n)

ll sum = 0;

bool flag = false;

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

for(int j = 0; j < a[i]; j++)

if(a[i] == 9 && a[i + 1] == 4)

}return sum;

}int main()}}

int t;

scanf("%d", &t);

while(t--)

// for(int i = 1; i <= 1000000; i++)

//

return 0;

}

HDU 3555 Bomb 基礎數字dp

題意大致就是說給你乙個數n,要你求0 n之間含有49的數的個數 理解題意很簡單下面就直接貼 了 include include include includeusing namespace std int64 dp 21 4 int a 1000 void init int main int g 0...

數字DP入門之hdu 3555 Bomb

hdu 3555 bomb 題意 在1 n 1 n 2 63 1 範圍內找出含有 49 的數的個數 與hdu 2089 不要62的區別 2089是找不不含 4 和 62 的區間範圍內的數,此題是含有 正好相反,對於 不要62 只是用第二位表示首位數字,這一題呢?看轉化 易知一定要要知道首位是9的個數...

HDU3555 Bomb 題解 數字DP

題目大意 求 1,n 範圍內有多少數包含 49 解題思路 這個問題我們可以分兩種解法來考慮 第一種是求不包含 49 的數的數量,用後減一下 另一種就是直接求包含 49 的數的數量。這種方法我們先通過數字dp求出 0,n 區間範圍內有多少數不包含 49 假設數量為 x 然後可以得到答案為 n 1 x ...