洛谷P1350:https://www.luogu.org/problemnew/show/P1350

思路

把矩阵分为上下两块N与M

放在N中的有i辆车 则放在M中有k-i辆车

N的长为a   宽为b

M的长为a+c   宽为d

在每个矩阵中的放置种类公式如下:

A(长度,车辆)*C(宽度,车辆)

给出证明:

比如对于N来说

可以在a列中找出i列放入车 所以是A(a,i)

而且有C(b,i)种选择列的方式

由此可得 枚举放在N和M的车有几辆 并计算两个矩阵种类之积即可

PS:对于矩阵M来说A为A(a+c-i,k-i) 而不是A(a+c,k-i)    因为每排只能放1辆而且有i辆已经放在N中了

代码

#include<iostream>
using namespace std;
#define mod 100003
#define ll long long
#define maxn 2005
ll a,b,c,d,k,ans;
ll fc[maxn][maxn];
ll A(ll n,ll m)
{
ll sum=;
for(ll i=;i<=m;i++)
sum=sum%mod*(n-m+i)%mod;//排列递推
return sum;
}
ll C(int n,int m)
{
if(fc[n][m]) return fc[n][m];//记忆化
if(m>n) return ;//如果放不下了
if(n==m||m==) return fc[n][m]=;
fc[n][m]=(C(n-,m-)%mod+C(n-,m)%mod)%mod;//组合递推
return fc[n][m];
}
int main()
{
cin>>a>>b>>c>>d>>k;
for(ll i=;i<=k;i++)//枚举i辆车放在N中 k-i辆车放在M中
ans=(ans+A(a,i)%mod*C(b,i)%mod*A(a+c-i,k-i)%mod*C(d,k-i)%mod)%mod;
cout<<ans;
}

最新文章

  1. 如何正确并完全安装Visual Studio 2015企业版本?
  2. 系统间通信(10)——RPC的基本概念
  3. OC语言构造方法
  4. mysql关联修改SQL及long与datetime类型相互转换
  5. JamCam创业故事:辞掉工作,去开发一个应用
  6. XCode中使用SVN 教程
  7. iOS 之 static
  8. xcode7中使用cocos2d-x3.8的webview控件
  9. Redis报错总结
  10. HDU-1686-KMP-水题
  11. OGR中空间叠加函数Union
  12. 使用SQL逆向生成PDM文件
  13. Go Revel - Jobs(任务调度模块)
  14. 【PHP】使用GD库实现 图像生成、缩放、logo水印和简单验证码
  15. PlistBuddy
  16. 旧贴-在 win7 / win8 下安装苹果系统 (懒人版)
  17. VR产业链全景图
  18. sorl基本原理
  19. 每天一个Qt类之QWidget
  20. 爪哇国新游记之二十二----排序判断重复时间复杂度为2n的位图法

热门文章

  1. css样式查找遇到的问题汇总
  2. HDU 4460 Friend Chains
  3. Wireshark使用技巧
  4. 统一latext在vsc的markdown+math和有道云笔记里的出发方式
  5. 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
  6. /Date(1410019200000+0800)/如何转换为date对象
  7. 简单Java程序向实用程序的过度:二进制文件的读写
  8. Python pip windows安装
  9. iOS开发之GCD基础
  10. 多线程篇七:通过Callable和Future获取线程池中单个务完成后的结果