給出a,b,求出[a,b]中各位數字之和能整除原數的數的個數。
10 19
【約束條件】1 ≤ a ≤ b ≤ 10^18
思路:數字dp,dp[i][j][k]的i表示第i位,j表示當前餘數,k表示第i位之前的每一位數字的和。
for (int i = 1; i <= pos * 9; i++)中的pos * 9是每一位數字的和的最大值。
#include #include #include using namespace std;
typedef long long ll;
ll a[20], dp[20][180][180];
ll dfs(int pos, int p, int sta1, int sta2, bool limit)
if (sta2 > p || sta2 + (pos + 1) * 9 < p)
if (!limit && dp[pos][sta1][sta2] != -1)
int up = limit ? a[pos] : 9;
ll result = 0;
for (int i = 0; i <= up; i++)
if (!limit)
return result;
}ll solve(ll x )
ll result = 0;
for (int i = 1; i <= pos * 9; i++)
return result;
}int main()
BZOJ 1799 self 同類分布
bzoj 1799 傳送門 一句話的題目,看得爽,做得煩 一般這類和數字相關的都是數字 dp 吧 不過一開始還是感覺不太可做,畢竟每個數模數不同 但要發現,模數最高也只可能為 9 19 171 於是只要將數按照他們的數字和 即模數 分類計算即可 這樣便暴力解決了模數不同的問題 設 dp sp sum...
HYSBZ 1799 self 同類分布
hysbz 1799 給出a,b,求出 a,b 中各位數字之和能整除原數的數的個數。sample input 10 19sample output 3hint 約束條件 1 a b 10 18 約束 乙個數是它自己數字和的倍數,直接dp根本找不到狀態,列舉數字和,因為總就162,然後問題就變成了乙個...
bzoj1799同類分布 數字DP
題目 數字dp。1 迴圈方法 預處理出每個位數上,和為某個數,模某個數餘某個數的所有情況 因為開四維會爆空間,所以省去模數,為此需要固定模數一次一次累加 餘數的轉移,以及可以填數的範圍都值得注意。如下 include include include using namespace std typed...