diff --git a/src/8/30/P1896.cpp b/src/8/30/P1896.cpp new file mode 100644 index 0000000..98a4162 --- /dev/null +++ b/src/8/30/P1896.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +using ll = int64_t; + +ll n,K; +std::vector line; +std::vector>> dp; + +static inline constexpr ll get1n(ll x){ + return __builtin_popcount(x); +} + +int main(){ + std::iostream::sync_with_stdio(false); + std::cin.tie(nullptr); + + std::cin>>n>>K; + line.reserve(n*n+1); + line.push_back(0); + for(ll msk=0;msk<(1ll<>i)&1){ + if((msk>>(i-1))&1 || msk>>(i+1)&1){ + goto nxt; + } + } + } + line.push_back(msk); + nxt:; + } + // for(ll i:line){ + // char buff[10]; + // memset(buff, 0, sizeof(buff)); + // itoa(i, buff, 2); + // printf("%s\n",buff); + // } + dp.resize(n+1,std::vector>(line.size(),std::vector(K+1))); + + + for(ll j=1;jK)continue; + if( + line[j] & line[k] + || line[j] & (line[k]<<1) + || line[j] & (line[k]>>1) + ){ + continue; + }else{ + for(ll x=cur1n;x<=K;K++){ + dp[i][j][x]+=dp[i-1][k][x-cur1n]; + } + } + } + } + } + + ll ans=0; + for(ll j=1;j