ACM新手DAY 15 數字dp 狀壓dp

2021-09-25 17:24:06 字數 2501 閱讀 4770

題目:求乙個區間裡面不含62和4的數的數目。

#include

using namespace std;

int aa[20]

;int dp[20]

[5];

///state存的是,當前這一位的前一位是不是6,

///limit是數字上界,如果,當前這一位的前一位迴圈未達到上界,那麼這一位可以取到9,否則只能取到本位上界

intdfs

(int pos,bool state,bool limit)

//pos位數,state狀態,limit數字上界

///dp陣列的作用就是記憶化搜尋,例如,對於276這個讀入數字,i=0與i=1時,下一位都是0~9,對應的ans是一樣的,

///就不需要再計算,直接返回就好if(

!limit) dp[pos]

[state]

=ans;

//記錄狀態

return ans;

///ans是讀入數字前面有多少個符合條件的(到0為止)

}int

solve

(int t)

//解決問題部分

return

dfs(s,false,true)

;///dfs第一此存的pos -> 讀入數字的位數s,state -> false,limit -> true

}int

main()

}

題目:對於乙個有n個數字的十進位制數x(ana

n−1a

n−2…

a2a1

a_na_a_…a_2a_1

an​an−

1​an

−2​…

a2​a

1​),我們將其重量定義為f(x

)=an

∗2n−

1+an

−1∗2

n−2+

…+a2

∗2+a

1∗

1f(x)=a_n*2^n-1 + a_n-1*2^n-2 + …+a_2*2+a_1*1

f(x)=a

n​∗2

n−1+

an​−

1∗2n

−2+…

+a2​

∗2+a

1​∗1

。現在給你兩個數字a和b,請計算0和b之間有多少個數字,包括0和b在內,它們的重量不超過f(a

)f(a)

f(a)

#include

#include

#include

using namespace std;

const

int maxn =

6666

;int dp[20]

[maxn]

;int aa[20]

;int m,n;

intf

(int x)

///f函式部分,此後稱為對映值

return sum;

}///state 為上限值減去上一位組成的數的餘數

intdfs

(int pos,

int state,

int limit)

///同樣是記憶化搜尋部分if(

!limit) dp[pos]

[state]

=ans;

return ans;

}int

solve

(int t)

return

dfs(s-1,

f(m)

,true)

;///之所以減一,每一位對應的是2的n-1次方

///dfs第一次存的是pos -> 讀入的n的位數減一, state -> 需要對比的數字的對映值, limit -> true

}int

main()

return0;

}

樣題:給你乙個n*n的格仔的棋盤,每個格仔裡面有乙個非負數。

從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。

#include

using namespace std;

int aa[25]

[25];

int dp[25]

[20000];

int st[

20000];

intmain()

}}int ans=0;

for(

int i=

0; i) ans=

max(dp[n]

[i],ans)

;//找到最大

cout<}}

狀態壓縮 + dp = 狀態壓縮dp

狀態壓縮就是把乙個比較複雜的狀態壓縮到用乙個簡單的數字表示。 ↩︎

檔案操作(day15)

呼叫函式可以使用被呼叫函式動態分配的 儲存區calloc函式也可以動態分配一組連續的 儲存區這個函式可以把所有動態分配的儲存區 內容設定成0 為了使用這個函式也需要包含stdlib.h標頭檔案 這個函式需要兩個引數,第乙個引數表示要 分配的儲存區個數,第二個引數表示單個 儲存區的大小 這個函式的返回...

python學習歷程day15

學習內建函式 包括map,sort,repr,lambda,filter,遞迴,二分法查詢 1.map lst 1,4,7,2,5,8 def func el return el 2 func lst 或者m map lambda el el 2,lst 把後面的可迭代物件中的每乙個元素傳遞給fun...

Day15 模組的練習

匯入標準庫模組 time 時間 標準庫模組 time 時間 練習 exercise02 03 import time 1.當前時間戳 1970年1月1日到現在經過的秒數 print time.time 1574153197.3360288 2.時間元組 年,月,日,時,分,秒,星期,年的天,夏令時偏...