日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP

發布時間:2023/12/19 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目分析】

? ? 沉迷水題,吃棗藥丸。

? ??

【代碼】

#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define F(i,j,k) for (int i=j;i<=k;++i) #define ll long long int cot[512],c1[512],c2[512][512],n,p; ll dp[10][512][90]; void print(int x) {F(i,0,n-1) printf("%d",(x>>i)&1); } void init() {F(i,0,(1<<n)-1){int x=i,ret=0;while (x) ret+=x&1,x>>=1;cot[i]=ret;}F(i,0,(1<<n)-1)if ((!((i>>1)&i))&&(!((i<<1)&i))) c1[i]=1;F(i,0,(1<<n)-1) if (c1[i])F(j,0,(1<<n)-1) if (c1[j])if ((!((j>>1)&i))&&(!((j<<1)&i))&&(!(j&i))){ // print(i); printf("---> "); print(j); printf("\n");c2[i][j]=1;} } int main() {scanf("%d%d",&n,&p);init();F(i,0,(1<<n)-1) if (c1[i]) dp[1][i][cot[i]]=1;F(i,1,n-1) F(j,0,(1<<n)-1)F(k,0,p) F(l,0,(1<<n)-1)if (c2[j][l]){ // printf("dp[%d] ",i+1); print(l); printf(" %d += dp[%d] ",k+cot[l],i); print(j); printf(" %d = %d\n",k,dp[i][j][k]);dp[i+1][l][k+cot[l]]+=dp[i][j][k];}ll ans=0;F(i,0,(1<<n)-1) ans+=dp[n][i][p];printf("%lld\n",ans); }

  

轉載于:https://www.cnblogs.com/SfailSth/p/6435462.html

總結

以上是生活随笔為你收集整理的BZOJ 1087 [SCOI2005]互不侵犯King ——状压DP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。