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多用記憶化搜尋實現, 不用遞推式的原因是轉移方程難以寫出.
這道題的搜尋方向是從高位向低位深搜, 假如可以更新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題
第一行輸入t,代表t組樣例,接下來輸入t行,每行給出n,k.1 t 100,1 n 1e6,1 k 100 求解1 n這n個數中,有多少個數的數字和是k的倍數.input 1 10 2 output 4dp 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...