关于地推求排列组合
  • 板块学术版
  • 楼主zzhjidetuideng
  • 当前回复14
  • 已保存回复14
  • 发布时间2024/8/10 22:50
  • 上次更新2024/8/11 09:01:37
查看原帖
关于地推求排列组合
922780
zzhjidetuideng楼主2024/8/10 22:50
#include<bits/stdc++.h>
const int M =998244353;

using namespace std;

int c[4010][4010];

int main(){
	
	for(int i=1;i<=1e3;i++){
		for(int j=0;j<=i;j++){
			if(j == 0)c[i][j] = 1;
			else c[i][j] = (c[i-1][j] + c[i-1][j-1]) % M;
		}
	}
	cout<<c[6][2]<<endl;
	
	return 0;
}

代码解释

这里C[i][j]C[i][j]表示CijC_i^j 。

因为

Cn0=0C_n^0=0

Cnm=Cn−1m+Cn−1m−1C_n^m=C_{n-1}^m+C_{n-1}^{m-1}

n<=mn <= m

所以便有以上代码的地推。

我的问题

代码输出为10 10,显然不是C62C_6^2。但是当你讲循环的ii改成00,即

for(int i=0; i <= 1e3; i++)

,又会输出正解1515,可是循环里有下标为i−1i-1的运算,即会出现下标为−1-1的情况,显然是不合理的,为什么还能输出正解?

2024/8/10 22:50
加载中...