C程式設計大賽B題

2021-07-30 09:28:22 字數 947 閱讀 1726

第一行輸入t, 代表t組樣例, 接下來輸入t行, 每行給出n, k. (1<=t<=100, 1<=n<=1e6, 1<=k<=100).

求解1-n這n個數中, 有多少個數的數字和是k的倍數.

input

1 10 2

output

4

dp[i][j]: 代表從低位向高位數i位, 數字和%k等於j的滿足題意的個數.

數字dp多用記憶化搜尋實現, 不用遞推式的原因是轉移方程難以寫出.

這道題的搜尋方向是從高位向低位深搜, 假如可以更新dp陣列, 就更新.

假如dp[i][j]被更新了, 那麼意味著下次搜到第i位且數字和%k等於j時, 可以直接取出來返回.

這裡有點難以理解的一點是limit的使用方法, 我解釋一下.

注意到給的數字是隨機的, 不妨取14231, 那麼, 我們一開始從最高位開始搜, 所以, 他能取的值就是0和1, 有limit.

下一層的limit等於limit&&(i==a[pos]), 就是說, 當且僅當這一層有limit, 且已經到達了最高位, 下一層有limit.

#include

#include

#include

using namespace std;

int n, dp[9][109], a[9], k;

int dfs(int

pos, int sum, int limit)

if(!limit)

dp[pos][sum%k]=ans;

return ans;

}int solve(int n)

return dfs(cnt-1, 0, 1);

}int main()

return

0;}

C程式設計大賽B題

c程式設計大賽b題 第一行輸入t,代表t組樣例,接下來輸入t行,每行給出n,k.1 t 100,1 n 1e6,1 k 100 求解1 n這n個數中,有多少個數的數字和是k的倍數.狀態定義 dp i j 代表從低位向高位數i位,數字和 k等於j的滿足題意的個數.數字dp多用記憶化搜尋實現,不用遞推式...

華為程式設計大賽決賽題

題目 俄羅斯方塊覆蓋。給定 乙個21 21的格仔矩陣,從1到441編號。輸入是乙個檔案testin.txt,裡面有4個數字,每乙個數字代表陣列下標,陣列元素值為1,表示障礙。空著的格仔用0表示。這四個數字代表的圖形只能是這個中的一種!也就是說。矩陣中4個1勾勒出個圖形只能是這兩種樣子。要求是用俄羅斯...

2023年華為程式設計大賽B卷第二道題

2 查詢最大的不重複數 30 分 問題描述 如果乙個數字十進位制表達時,不存在連續兩位相同,則稱之為 不重複數 例如,105 1234 和 12121 都是 不重複數 而 11 100 和 1225 不是。給定乙個正整數 a 返回大於 a 的最小 不重複數 a 小於 100000 要求實現函式 un...