luoguP4127 數字dp 列舉

2021-10-04 07:48:27 字數 1279 閱讀 2939

題目大意:

給出兩個數a,b,求出[a,b]中各位數字之和能整除原數的數的個數。

題解:各位數字之和最大為9*18=162,因此我們可以列舉數字之和。

定義狀態為dp[pos][sum1][sum2]表示列舉到pos位,前面數字的和sum1,以及前面數字的組成的數對mod取餘的結果。

最後判斷一下sum1是否等於mod並且sum2對mod取餘的結果為0.

trick:注意列舉mod的時候可以開乙個全域性的mod變數,然後再列舉,不能列舉i再把mod賦值為i,這樣常數比較大。

上界為數字個數*9。

**實現:

#pragma gcc optimize(2)

#include #include #include #include #include #include #include #include #include #include #include #define pi atan(1.0) * 4

#define e 2.718281828

#define rp(i, s, t) for (register int i = (s); i <= (t); i++)

#define rp(i, t, s) for (register int i = (t); i >= (s); i--)

#define ll long long

#define ull unsigned long long

#define mst(a, b) memset(a, b, sizeof(a))

#define lson l, m, rt << 1

#define rson m + 1, r, rt << 1 | 1

#define pii pair#define mp make_pair

#define pb push_back

#define debug printf("ac\n");

using namespace std;

inline int read()

while (c >= '0' && c <= '9')

return a * b;

}int a[20],num,mod;

ll dp[20][200][200];

inline ll dfs(int pos,int sum1,int sum2,int limit)

inline ll solve(ll x)

return res;

}int main()

luoguP1043數字遊戲

丁丁最近沉迷於乙個數字遊戲之中。這個遊戲看似簡單,但丁丁在研究了許多天之後卻發覺原來在簡單的規則下想要贏得這個遊戲並不那麼容易。遊戲是這樣的,在你面前有一圈整數 一共n個 你要按順序將其分為m個部分,各部分內的數字相加,相加所得的m個結果對10取模後再相乘,最終得到乙個數k。遊戲的要求是使你所得的k...

luogu P2034 選擇數字

題面傳送門 對於這道題,簡單粗暴的dpdp dp是不難想的,dpdp dp方程式為fi max fj 1 s j 1i as f i max f sum ia s fi ma x fj 1 s j 1i as 其中max i k 0 j i 1max i k,0 leq j leq i 1 max ...

luogu P5660 數字遊戲

題面傳送門 這道題。對於20 20 20 的資料,保證輸入的字元全部為000。我們可以正解騙分對不對?寫一行put char 0 putchar 0 putcha r 0 就有二十分對不對?那那些爆零的同學。看一下騙分導論 不過我相信,真正的大佬是不用上面的做法的。其實,直接模擬唄。先走一遍cha ...