上海交大oj 數學題3 數字dp)

2022-08-30 17:00:14 字數 2020 閱讀 3936

給定乙個數字,他在十進位制下從高位到低位一次是n0, n1, n2, n3,...

那麼定義它的「差和」為n0-n1+n2-n3+...

如:十進位制數字abcdefg,每個字母代表乙個位,那麼差和為a-b+c-d+e-f+g。

所以十進位制數字1234567差和為1-2+3-4+5-6+7=4

現在給你們乙個閉區間[m, n],請求出區間內差和為x的數字個數。

輸入只有一行,三個數字,m n x

30%: 0<= m <= n <=10^3, 50%: 0<= m <= n <=10^8, 100%: 0<= m <= n <=10^18

-100<= x <=100

輸出只有乙個數字,表示區間內差和為x的數字的總和mod1000000007的結果。

100 111 1
211

這題不會做,妥妥的。為了看懂助教的**,費了好大勁兒,乾脆加點注釋,防止以後有用。

要點:1.由於區間太大,無法遍歷,所以要把乙個數按位處理,有點轉化為陣列的意思。

2.動歸記錄的陣列中有遍歷所有和差值,為了能用陣列下標表示,把-100-100轉化到0-200,計算乙個數的和差值時加上100,這樣雖然和差值變了,但對應和差值的數是沒有變的。

3.需要同時更新滿足和差值的所有數的和以及個數,之所以要記錄個數,是為了加上最高位對應的值,比如首位為1長度為5的情況,它的數之和為所有對應滿足的長度為4的數之和加上 個數*10000.

4.在最高位確定情況下,它的子問題(即位數少一位)的首位數是可以為零的。

具體看**及注釋:

1 #include 2

#define limit 1000000007 34

long

long dp[22][10][220][2] = {}; //

分別表示數字的長度,數字首位數,和差的值+100,滿足和差值的所有數的和以及個數

5long

long basics[22] = ; //

預處理的陣列,方便使用,分別為0,1,10,100,。。。

6long

long lower, upper, sum; //

三個輸入的值 78

long

long getresult(long

long

number)

26 result %=limit;27}

28return

result;29}

3031

intmain()

39for(int i = 2; i < 22; ++i)

40for(int j = 0; j < 10; ++j)

41for(int k = 0; k < 200; ++k)

46 dp[i][j][k][0] += dp[i][j][k][1] * (j * basics[i] % limit) % limit; //

加上最高位的對應值

47 dp[i][j][k][0] %=limit;

48 dp[i][j][k][1] %=limit;49}

50long

long result_upper = getresult(upper+1

);51

long

long result_lower =getresult(lower);

52long

long result = result_upper -result_lower;

53if(result < 0

)54 result +=limit;

55 printf("

%lld\n

", result);

56 }

view code

演算法之路之征服上海交大的oj 矩陣翻轉

矩陣翻轉 description 給定乙個正方形的整數矩陣,輸出將該矩陣按某一方向翻轉後的結果。input format 輸入第一行有乙個整數n,表示一共有n組資料 n不會為負數。之後有n組資料,對於每組資料 第一行有兩個整數a和b,分別表示正方形矩陣的邊長,以及翻轉的方向。當b 0時水平翻轉,當b...

演算法之路之征服上海交大的oj 水槍滅火

水槍滅火 description 以此題紀念上海 11 15 高樓火災遇害者 11月15日下午,上海靜安區膠州路728號的一幢28層民宅發生嚴重火災。消防部門接警後立刻出動25個消防中隊 百餘輛消防車投入滅火搶救行動,緊急疏散和救助了附近居民百餘人。火災導致58人遇難。此時大樓的所有樓層已經全部被烈...

演算法之路之征服上海交大的oj 求和遊戲

求和遊戲 description 石柱上有一排石頭鍵盤,每個鍵上有乙個整數。請你在鍵盤上選擇兩個鍵,使這兩個鍵及其之間的鍵上的數字和最大。如果這個最大的和不為正,則輸出 game over input format 第1行 鍵的個數n。第2.n 1行 鍵上的數字整數 ai 100 ai 100 對於...