zoukankan      html  css  js  c++  java
  • 【CF1027E】Inverse Coloring(DP)

    题意:给出一个n*n的矩阵,要求在每个位置涂上黑/白色,

    要求满足:任意相邻的两行,其颜色要么完全相同,要么完全相反

    任意相邻的两列,其颜色也要么相同要么完全相反

    且这个矩形中,不存在任意一个大小大于等于k的同色矩形

    求方案数模998244353

    n<=5e2,1<=k<=n^2

    思路:From https://blog.csdn.net/qq_34454069/article/details/81835687

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<string>
     4 #include<cmath>
     5 #include<iostream>
     6 #include<algorithm>
     7 #include<map>
     8 #include<set>
     9 #include<queue>
    10 #include<vector>
    11 #include<bitset>
    12 using namespace std;
    13 typedef long long ll;
    14 typedef unsigned int uint;
    15 typedef unsigned long long ull;
    16 typedef pair<int,int> PII;
    17 typedef vector<int> VI;
    18 #define fi first
    19 #define se second 
    20 #define MP make_pair
    21 #define N      510
    22 #define M      51
    23 #define MOD 998244353
    24 #define eps 1e-8 
    25 #define pi     acos(-1)
    26 #define oo     1e9
    27 
    28 int dp[N][N],f[N];
    29 
    30 void add(int &x,int y)
    31 {
    32     x=(ll)x+y;
    33     if(x>=MOD) x-=MOD;
    34 }
    35 
    36 int main()
    37 {
    38     int n,K;
    39     scanf("%d%d",&n,&K);
    40     for(int i=1;i<=n;i++)
    41     {
    42         dp[0][i]=1;
    43         for(int j=1;j<=n;j++)
    44          for(int k=1;k<=min(i,j);k++) add(dp[j][i],dp[j-k][i]);
    45     }
    46     for(int i=1;i<=n;i++) f[i]=(dp[n][i]-dp[n][i-1]+MOD)%MOD; 
    47     int ans=0;
    48     for(int i=1;i<=n;i++)
    49      for(int j=1;j<=n;j++)
    50       if(i*j<K) add(ans,(ll)f[i]*f[j]%MOD); 
    51     ans=ans*2%MOD;
    52     printf("%d
    ",ans);
    53     return 0;
    54 }
  • 相关阅读:
    javascript修改浏览器title方法 JS动态修改浏览器标题
    input type="checkbox" 选中传值,不选中传值的方法讲解
    关闭控制台的自动切换按钮
    mac切图
    charles
    apache
    超级经典的HTTP协议讲解
    一个很有趣的算法
    移动端网络判断
    移动端1px细线的处理
  • 原文地址:https://www.cnblogs.com/myx12345/p/10108061.html
Copyright © 2011-2022 走看看