loj 1021 狀壓dp 記憶化搜尋)

2021-09-08 16:59:19 字數 834 閱讀 6290

題目大意:給定的乙個某進製下的排列,問它的全排列有多少個能夠整除給定的十進位制下的數字k。

思路:記憶化搜尋,dp[state][r]表示在某狀態下被k除餘數為r有多少個。

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define fill(a,b) memset(a,b,sizeof(a))

8 typedef long

long

ll;9

10int

base,k,len,num[17

];11 ll dp[1

<<17][21

];12

char str[21

];13

14 ll dfs(int state,int

mod)

1519

if(dp[state][mod]!=-1)return

dp[state][mod];

20 ll ans=0;21

for(int i=len-1;i>=0;i--)25}

26return dp[state][mod]=ans;27}

2829

intmain()

3041 fill(dp,-1

);42 printf("

case %d: %lld\n

",t++,dfs(0,0

));43}44

return0;

45 }

view code

LightOJ 1057 狀壓dp,記憶化

題目大意 有一張n m的圖,上面有乙個起始點x,和最多15個金子g,每一步你可以走到相鄰的8個格仔,題目要求走完所有的金子並且返回初始點的最小路徑是多少 題目解析 狀態壓縮,定義dp i j 表示在j序列下在第i個金子需要走的最小路徑,如果是已經沒有金子的話就返回到開始點的距離,dp的時候需要記憶化...

校內模擬 記憶(狀壓DP)

考場想到了正解,然後被卡快取記憶體,gg 乙個顯然的轉化就是設e ie i ei 表示朋友選擇第i ii個串的時候的期望操作次數。則答案就是所有e ie i ei 的平均值。首先考慮乙個o n l2l o nl2 l o nl2l 的暴力,對於每個串,列舉所有其他串看有多少個位置相同,則我們能夠知道...

loj 10170騎士 狀壓DP

在n n 1 n 10 的棋盤上放k 0 k n n 個國王 可攻擊相鄰的8 個格仔 求使它們無法互相攻擊的方案總數。輸入檔案僅一行為兩個整數n和k。輸出檔案僅一行為方案總數,若不能夠放置則輸出0。3 2 樣例輸入2 4 4 樣例輸出2 79一眼狀壓,用1表示國王 話說真的不知道這個翻譯在幹什麼,到...