码迷,mamicode.com
首页 > 其他好文 > 详细

P1896 [SCOI2005]互不侵犯

时间:2019-07-29 00:52:18      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:i++   image   c++   div   cin   names   pre   int   初始化   

技术图片

______________________________________________________________

和上一题差不多,注意初始化与判断即可

#include<bits/stdc++.h>
using namespace std;
long long int n,kk,tot,can[4096],dp[11][1096][121],cnt[4096];
long long ans;
int main()
{
    cin>>n>>kk;
    for(int i=0;i<=(1<<n)-1;i++)
    if((!(i&(i<<1)))){can[++tot]=i;    
    int q=i;
    while(q){if(q%2==1){cnt[i]++;}q>>=1;}
    }
    for(int j=1;j<=tot;j++)dp[1][can[j]][cnt[can[j]]]=1;
    for(int i=2;i<=n;i++)
    for(int j=1;j<=tot;j++)
    for(int k=1;k<=tot;k++)
    {if((can[j]&can[k])||((can[j]<<1)&can[k])||((can[j]>>1)&can[k]))continue;
    for(int t=0;t<=kk;t++)dp[i][can[j]][t+cnt[can[j]]]+=dp[i-1][can[k]][t];}
    for(int i=1;i<=tot;i++)ans+=dp[n][can[i]][kk];
    cout<<ans;
}

 

P1896 [SCOI2005]互不侵犯

标签:i++   image   c++   div   cin   names   pre   int   初始化   

原文地址:https://www.cnblogs.com/SFWR-YOU/p/11261565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!