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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

luogu P1896 [SCOI2005]互不侵犯

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

去tm插頭dp

數據范圍這么小,又要求,顯然上dp

\(f[i][j][k]\)表示放到第\(i\)行,總共放了\(j\)個那啥,第\(i\)行的格子狀態為\(k\)的方案

先預處理出一行內狀態的放置個數和格子狀態,因為那啥占據周圍一圈的格子,所以轉移時前后兩行格子狀態沒有交集的狀態轉移

#include<algorithm> #include<iostream> #include<cstring> #include<cstdio> #include<vector> #include<cmath> #include<ctime> #include<queue> #include<map> #define LL long long #define il inline #define re registerusing namespace std; const LL mod=1000000007; il LL rd() {re LL x=0,w=1;re char ch;while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w; } LL nn,n,kk,f[10][85][1100],ans; LL nu[1100],b[1100],tt; //nu是某個狀態的棋子數量,b為相對應的格子狀態 bool v[1100]; il void init(int i,int j,int k) {if(v[k]) return;++tt;nu[tt]=j,b[tt]=k;v[k]=true;for(;i<=n;i++)init(i+2,j+1,k|(1<<(i-1))|(i<n?(1<<i):0)); //對于某個棋子所在行以及上(沒什么用),下的行,棋子所在列和左邊(沒什么用),右邊都被占了 }int main() {freopen("xzz.in","r",stdin);freopen("xzz.out","w",stdout);n=rd(),kk=rd();nn=1<<n;init(1,0,0);for(int i=1;i<=tt;i++) f[1][nu[i]][b[i]]=1;for(int i=2;i<=n;i++){for(int j=1;j<=tt;j++)for(int k=1;k<=tt;k++){if((b[j]|b[k])!=b[j]+b[k]) continue;for(int l=nu[j];l<=kk;l++)f[i][l][b[j]]+=f[i-1][l-nu[j]][b[k]];}}for(int j=1;j<=tt;j++) ans+=f[n][kk][b[j]];printf("%lld\n",ans);return 0; } 語文好差啊嚶嚶嚶

轉載于:https://www.cnblogs.com/smyjr/p/9408631.html

總結

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

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