設$f[i][j][k]$表示考慮了前$i$個數字,增加了$j$根火柴,刪掉了$k$根火柴是否可能,用bitset加速dp。
然後設$g[i][j]$表示增加了$i$根火柴,刪掉了$j$根火柴的最小代價,列舉移動次數進行更新。
決策滿足單調性,故可以分治求解。
設$m=14n$,則時間複雜度為$o(\frac+m^2\log m)$。
#include#includeusing namespace std;
const int n=205,m=2810,inf=~0u>>1;
int n,m,p1,q1,p2,q2,p3,q3,i,j,k,o,w1[m],w2[m],w3[m],g[m],ans=inf;
int s[10]=,dx[10][10],dy[10][10];
char a[n],b[n];
bitsetf[2][m];
inline void up(int&a,int b)
void solve(int l,int r,int dl,int dr)
int main()
f[0][0][0]=1;
for(i=o=1;i<=n;i++,o^=1)
for(i=0;i<=m;i++)
return printf("%d",ans),0;
}
取火柴遊戲
玩完幾把遊戲後。突然想起了乙個比較老的遊戲 取火柴遊戲!遊戲規則簡單 不需要撿裝備,也沒有危險的空投。emm言歸正傳!有n根火柴,每人每次最多取4根火柴,最少取一根火柴。如果某人取到最後一根火柴,那麼恭喜你,輸了!emmm上 void quhuochai last last user if last...
拿火柴遊戲
桌子上有一堆火柴,遊戲開始時共有n根火柴,兩個玩家輪流拿走1 2 3 4根火柴 選擇一種方案拿 拿走最後一根火柴的玩家為獲勝方。請問先走的玩家設計乙個制勝的策略 如果該策略存在 若桌子上只有只有1 4根火柴,那麼先手必贏 若桌子上只有5根火柴,那麼無論先手拿幾根都必輸 也就是意味著先手若要贏,那麼快...
取火柴遊戲
include include include using namespace std float num1 0 float num2 0 struct treenode class tree float chance treenode ptr void run tree tree1 protect...