數字遊戲II

2021-10-22 22:11:33 字數 1288 閱讀 7216

假設我們當前列舉到的第i位,且第i位上的數字是x,那麼對於答案中的第i位數字j來說,可以填兩類數:

如何處理f陣列呢?f[i

][j]

[k]f[i][j][k]

f[i][j

][k]

表示一共有i位,且最高位數字是j,且(所有位數字之和模n後的結果為k)的數的個數。

狀態轉移:

因為第i位已經填了j,且所有位數字之和模n的結果為k,所以我們考慮第i-1位,假設第i-1位上填的數字是x,由於j已經知道了,即j_ _ _,那麼剩下的i-1位數字之和模n的結果就是(k−

j)%n

(k-j)\%n

(k−j)%

n,由於模n,因此得到的餘數範圍0≤k

對於c++語言來說,正數取模會得到正數,但是負數取模會得到負數,為了防止負數取模得到負數,我們可以用(a%

b+b)

%b(a\%b+b)\%b

(a%b+b

)%b的方法來解決。

#include#include#includeusing namespace std;

const int n=12,m=102;

//f[i][j][k]表示一共有i位,最高位數字是j,且所有位數字之和模p的結果為k的數的個數

int f[n][10][m];

int p; //模數

//因為對於c++來說,負數取模會得到負數,為了防止得到的是負數,可以這麼寫

int mod(int a,int b)

//預處理

void init()

int res=0;//答案

int last=0;//前面位的數字之和

//從高位一直列舉到低位

for(int i=nums.size()-1;i>=0;i--)

{int x=nums[i];//取出當前位的數字

//走左側分支

//第i位可以放[0,x-1]中的數字

for(int j=0;j>l>>r>>p)

{init();

cout <

數字遊戲 II

由於科協裡最近真的很流行數字遊戲。某人又命名了一種取模數,這種數字必須滿足各位數字之和 mod nmod n 為 00。現在大家又要玩遊戲了,指定乙個整數閉區間 a.b a.b 問這個區間內有多少個取模數。輸入格式 輸入包含多組測試資料,每組資料佔一行。每組資料報含三個整數 a,b,na,b,n。輸...

AcWing 1084 數字遊戲 II

題目描述 由於科協裡最近真的很流行數字遊戲。某人又命名了一種取模數,這種數字必須滿足各位數字之和 mod n為 0。現在大家又要玩遊戲了,指定乙個整數閉區間 a.b 問這個區間內有多少個取模數。輸入格式 輸入包含多組測試資料,每組資料佔一行。每組資料報含三個整數 a,b,n。輸出格式 對於每個測試資...

AcWing1084 數字遊戲II(數字dp)

y總的數字dp板子有點東西的,沒有用記憶化搜尋這東西。這題還是套板子,因為是模數,所以我們還是考慮建立狀態為f,表示前i個,最高位填j,模為k的值 include include include include using namespace std const int n 1e5 10 int f...