思路:這個狀壓確實挺強。第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的點表示橋的終點。青蛙從橋的起...