首页 > 其他分享 >做题记录整理dp13 P5664 [CSP-S2019] Emiya 家今天的饭(2022/9/26)

做题记录整理dp13 P5664 [CSP-S2019] Emiya 家今天的饭(2022/9/26)

时间:2022-09-26 22:03:32浏览次数:89  
标签:md 26 P5664 cnt ans dp13 for1 col dp

P5664 [CSP-S2019] Emiya 家今天的饭

终于遇到一个我感觉在考场上有可做出来的题了。。。
唯一想不到的就是最开始的容斥(也就是说还是看了题解。。。),如果容斥想到的话其他其实挺自然的

#include<bits/stdc++.h>
#define for1(i,a,b) for(int i = a;i<=b;i++)
#define ll long long
#define mp(a,b) make_pair(a,b)
using namespace std;
int n,m,a[505][3005],cnt[505][3005];
ll dp[505][505],g[505][505];
const ll md=998244353;  
ll ans;
//cnt[i[[j]表示第i行的除了第i行第j个数以外的数的和
//f[i][j]表示前i行在第col行选择的数比在其他行选择的数多j个的方案数
//g[i][j]表示前ii行共选了j个数的方案数
int main()
{
cin >> n >> m;
	for1(i,1,n)
	    for1(j,1,m)
	    {
	        scanf("%d",&a[i][j]);
	        cnt[i][0] = (cnt[i][0]+a[i][j])%md;
		}
    for1(i,1,n)
        for1(j,1,m)
            cnt[i][j] = (cnt[i][0]-a[i][j]+md)%md;
 
    for1(col,1,m)//枚举非法的行 
    {
        memset(dp,0,sizeof(dp)); 
        dp[0][n] = 1;
        for1(i,1,n)//枚举每一列 
            for1(j,n-i,n+i)//因为每列只选一个,所以差值的范围应该是[-i,i],但是由于下标不能有负数,所以需要整体平移 
                dp[i][j]=(dp[i-1][j]+dp[i-1][j-1]*a[i][col]%md+dp[i-1][j+1]*cnt[i][col]%md)%md;
                //相当于前一行选j个的方案数+这一行选择第col列的数的方案数+这一行选择col列以外的数的方案数 
        for1(j,1,n)
            ans = (ans+dp[n][n+j])%md;//记录,因为每次dp数组清空(col列不同) 
	}
	
	g[0][0] = 1;
	for1(i,1,n)
	    for1(j,0,n)
	    	g[i][j] = (g[i-1][j]+(j>0?g[i-1][j-1]*cnt[i][0]%md:0))%md;
		
    for1(i,1,n)
	    ans = (ans-g[n][i]+md)%md;//记录总方案数  
	cout<<ans*(md-1)%md<<endl;//容斥 
	return 0;
}

标签:md,26,P5664,cnt,ans,dp13,for1,col,dp
From: https://www.cnblogs.com/yyx525jia/p/16732655.html

相关文章

  • 【2022-09-26】DRF从入门到入土(二)
    DRF从入门到入土(二)一、APIView基本使用使用view+JsonResponse获取所有图书接口安装drf:pip3installdjangorestframeworksettings.py注册app:'rest_framework......
  • 做题记录整理dp12 P7961 [NOIP2021] 数列(2022/9/26)
    P7961[NOIP2021]数列当时在考场上对于拿部分分这个感念不是很清晰,所以当时连暴力分都没拿。。。事实上这题在看了题解之后还是有很多地方没搞明白,比如最后统计答案,为什......
  • Test 2022.09.26
    今天是水题专场T1扩散感觉这种要么就是二分答案网络流,要么就是最小生成树,(随便口胡的),树德保留节目了属于是。分析简简单单一眼最小生成树(又是),边权就是两个点之间存在公......
  • 9.26水题大赏
    2022-9-26T1扩散明显可以二分答案,也可以用最小生成树去做。考试时写的最小生成树,每两个点连一条边权为这两个点的曼哈顿距离。每次找最小的距离,\(\div2+1\)后更新\(ans......
  • 37th 2022/8/12 模拟赛总结26
    这次真不可理喻这次T1是差分约束,这次,得完全弄懂T1,因为之前考过差分约束,但一直都不会,改了题后却没有印象,这次做出总结:就是一个将输入改为一条形同松弛原理的式子,如:\(X_i-X......
  • 9.26-CSP-S模拟12
    T1开挂比较水的贪心题,可以证明一定只包含不相交,拿个栈就很好做了。点击查看代码#include<bits/stdc++.h>typedeflonglongll;typedefunsignedlonglongull;ty......
  • 2022.9.26比赛记录
    T1题意给定两个长度为\(n\)的序列\(a,b\),选择一个最长的区间\([l,r]\)使得\(\sum\limits_{i=l}^ra_i\ge0\)并且\(\sum\limits_{i=l}^rb_i\ge0\)。输出这个......
  • 9.26
    今日内容1.基本数据类型2.与用户交互3.格式化输出4.基本运算符5.常用赋值符6.逻辑运算符7.成员运算符8.身份运算符基本数据类型整型就是整数int代码实现:age......
  • 9月26日~10月2日
    9月26关于今天做了两道IOI的题,早些年的T1有些水……(虽然我做了IOI的题,但我却去不了IOI的赛场,艹好真实)。明白什么叫一步步来么......
  • 我的收藏周刊026
    文章分享“我觉得他们找错了靶子”许知远的《十三邀》之辩南方周末关于许知远十三邀的一篇文章,付费内容,值得一看。为什么需要虚拟化kernelnewbies上的以前为什么......