1725
題意:$m*n:\ m,n \le 12$的牧場,有的格仔不能選,相鄰不能同時選,求方案數
$f[i][j]$前$i$行當前行選的集合為$j$
#include #includeview code#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=13,s=(1
<<12)+5,p=1e8;
inline
intread()
while(c>='
0'&&c<='9')
return x*f;
}int
m,n;
intf[n][s],cant[n];
inline
void mod(int &x)
intmain()
1231
題意:$n \le 16$個數字排列,所有相鄰數字相差$\ge k$的方案數
$f[i][j]$表示當前已經選上的數字集合為$j$,以第$i$個數字結尾的方案數
#include #includeview code#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=18,s=(1
<<16)+5,p=1e8;
inline
intread()
while(c>='
0'&&c<='9')
return x*f;}
intn,k,a[n];
ll f[n][s];
intmain()
ll ans=0
;
for(int i=0;i1
]; printf(
"%lld
",ans);
}
1688
題意:有n頭牛,它們可能患有d種病,現在從這些牛中選出若干頭來,但選出來的牛患病的集合中不過超過k種病,最多選幾頭
$f[i][s]$表示前$i$頭病集合為$j$最多選幾頭
用更新的寫法比較好,因為你不知道去掉第$i$頭後其他牛有沒有第$i$頭牛的病,還得預處理之類的
#include #include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;const
int n=1005,s=(1
<<15)+5
;inline
intread()
while(c>='
0'&&c<='9')
return x*f;
}int
n,m,k,a[n],f[s];
inline
int bitcount(int
n)int
main()
int all=1
<
for(int i=1;i<=n;i++)
for(int j=all-1;j>=0;j--)
f[j|a[i]]=max(f[j|a[i]],f[j]+1
);
int ans=0
;
for(int j=0;j)
if(bitcount(j)<=k) ans=max(ans,f[j]);
printf("%d
",ans);
}
狀壓dp 玉公尺田 狀壓dp
相關 強相關 327.玉公尺田 狀壓dp 小國王 狀壓dp 是井字形,本題是十字形。思路 狀態計算 時間複雜度 n 2 n 2n o n 22n 12 2 24n 2 n 2 n o n2 12 2 n 2n 2 n o n22n 12 224 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...
鋪地磚 狀壓DP練習
有乙個n m n 5,m 1000 的棋盤,現在有1 2及2 1的小木塊無數個,要蓋滿整個棋盤,有多少種方式?答案只需要mod1,000,000,007即可。我也不知道這道題的 qaq n和m的範圍本應是相同的,但是題目給出的n的值很小,這就給我們提供了使用狀壓dp的思路。假設第一列已經鋪滿,則第二...
狀壓dp小記
鋪磚 題意 現有nm的一塊地板,需要用12的磚塊去鋪滿,中間不能留有空隙。問這樣方案有多少種 include using namespace std typedef long long ll const int maxn 1 11 int n,m,state ll dp 15 maxn s1表示本行...