題目大意:給定的乙個某進製下的排列,問它的全排列有多少個能夠整除給定的十進位制下的數字k。
思路:記憶化搜尋,dp[state][r]表示在某狀態下被k除餘數為r有多少個。
1 #include2 #include3 #include4 #include5 #include6view codeusing
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 }
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表示國王 話說真的不知道這個翻譯在幹什麼,到...