題目:求乙個區間裡面不含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(anan−1a
n−2…
a2a1
a_na_a_…a_2a_1
anan−
1an
−2…
a2a
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.時間元組 年,月,日,時,分,秒,星期,年的天,夏令時偏...