专栏文章

P1497 木牛流马 题解

P1497题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minezj10
此快照首次捕获于
2025/12/02 01:19
3 个月前
此快照最后确认于
2025/12/02 01:19
3 个月前
查看原文

[P1497 木牛流马] 题解

推导过程:


n=4n = 4,h=1h = 1,c=1c = 1时:
放置木牛流马的个数情况数可表示为
14×44\times4n2n^2
23×33\times3(n1)2(n-1)^2
32×22\times2(n2)2(n-2)^2
ii(ni+1)2(n-i+1)^2
TEXT
不能放在同行同列           ——writer
所以总情况数为:
ans=n2+(n1)2+...+(ni+1)2 ans = n^2 + (n-1)^2 + ... + (n-i+1)^2
但是以上结论是在\red{颜}\blue{色}互不相同的情况才下成立 所以要再减去重复的部分:
h重复的情况数
004×3×2×1=4!4\times3\times2\times1=4!
114×3×2=4!1!4\times3\times2=\frac{4!}{1!}
224×3=4!2!4\times3=\frac{4!}{2!}
334=4!3!4=\frac{4!}{3!}
所以
ans=n2+(n1)2+...+(ni+1)2c1!×c2!×c3!×...×ch!ans=\frac{n^2+(n-1)^2+...+(n-i+1)^2}{c_1!\times c_2!\times c_3!\times...\times c_h!}
上代码:
CPP
#include <iostream>//数学 
using namespace std;
int main(){
	int n,k,h; cin >> n >> k >> h;
	long long ans = 1,c = 0;
	for(int i = 1;i <= k;i++)
		ans *= (n-i+1) * (n-i+1);
	for(int i = 1;i <= h;i++){
		cin >> c;
		for(int j = 1;j <= c;j++) ans /= j;
	}
	cout << ans;
	return 0;
}
endend

评论

0 条评论,欢迎与作者交流。

正在加载评论...