洛谷2704 狀壓dp

2021-09-24 09:15:01 字數 940 閱讀 6448

思路:這個狀壓確實挺強。第i行的不僅僅和i-1行有關係,還和i-2行有關係。一般的思路好像解決不了問題,咋搞?我們定義乙個陣列

dp[105][1<<10][1<<10],dp[i][t1][t2],i表示的是當前行,t1表示的是當前行的狀態,t2表示的是i-1行的狀態。假設t3表示的是i-2行的狀態,列舉i-2行,i-1行,i行。則當滿足三個條件0==t1 & t2   0==t1 & t3   0==t2 & t3的時候,有

dp[i][t1][t2]=max(dp[i][t1][t2],dp[i-1][t2][t3]+t1這個狀態中1的個數);(t1假設為3,則1的個數是2;t1為2,1的個數是1)

當然還需要滾動陣列優化,不然爆空間。

//記錄的是前一行的狀態

#include using namespace std;

const int maxn=1<<10;

int dp[2][maxn][maxn];

int n,m,con[105][maxn],pos[maxn];

char g[105][15];

void dfs(int id,int p,int sum,int pre)

if(pre+2>1;

} return ans;

} int main()

printf("%d",max);

return 0;

} int f1=0,f2=1;

for(int i=0;i}

} for(int i=3;i<=n;i++)}}

} f1=(f1==0)?1:0;

f2=(f2==0)?1:0;

} printf("%d",max);

return 0;

}

洛谷狀壓DP做題記錄

題面確實是狀壓的入門題 用dp i j 表示以i結尾,狀態為j時的方案數,如下 includeusing namespace std const int maxn 1e6 7 const int n 20 int n,k ints maxn long long dp n maxn long long...

狀壓dp 洛谷P2622

狀壓dp 洛谷p2622 現有n盞燈,以及m個按鈕。每個按鈕可以同時控制這n盞燈 按下了第i個按鈕,對於所有的燈都有乙個效果。按下i按鈕對於第j盞燈,是下面3中效果之一 如果a i j 為1,那麼當這盞燈開了的時候,把它關上,否則不管 如果為 1的話,如果這盞燈是關的,那麼把它開啟,否則也不管 如果...

洛谷P1052 過河 狀壓dp

在河上有一座獨木橋,乙隻青蛙想沿著獨木橋從河的一側跳到另一側。在橋上有一些石子,青蛙很討厭踩在這些石子上。由於橋的長度和青蛙一次跳過的距離都是正整數,我們可以把獨木橋上青蛙可能到達的點看成數軸上的一串整點 0,1,l 其中l是橋的長度 座標為0的點表示橋的起點,座標為l的點表示橋的終點。青蛙從橋的起...