拉丁矩阵问题
时间: 1ms 内存:64M
描述:
现有n 种不同形状的宝石,每种宝石有足够多颗。欲将这些宝石排列成m行n 列的一个矩阵,m≤n,使矩阵中每一行和每一列的宝石都没有相同形状。试设计一个算法,计算出对于给定的m和n,有多少种不同的宝石排列方案。
对于给定的m和n,计算出不同的宝石排列方案数。
输入:
输入数据的第1行有2个正整数m和n,0 < m ≤n < 9
输出:
将计算出的宝石排列方案数输出。
示例输入:
3 3
示例输出:
12
提示:
参考答案(内存最优[1272]):
#include<iostream>
using namespace std;
int main(){
int m,n;
while(cin>>m>>n){
if(m==1){
if(n==1) cout<<"1"<<endl;
if(n==2) cout<<"2"<<endl;
if(n==3) cout<<"6"<<endl;
if(n==4) cout<<"24"<<endl;
if(n==5) cout<<"120"<<endl;
if(n==6) cout<<"720"<<endl;
if(n==7) cout<<"5040"<<endl;
if(n==8) cout<<"40320"<<endl;
if(n==9) cout<<"362880"<<endl;
}
if(m==2){
if(n==2) cout<<"2"<<endl;
if(n==3) cout<<"12"<<endl;
if(n==4) cout<<"216"<<endl;
if(n==5) cout<<"5280"<<endl;
if(n==6) cout<<"190800"<<endl;
if(n==7) cout<<"9344160"<<endl;
if(n==8) cout<<"598066560"<<endl;
if(n==9) cout<<"48443028480"<<endl;
}
if(m==3){
if(n==3) cout<<"12"<<endl;
if(n==4) cout<<"576"<<endl;
if(n==5) cout<<"66240"<<endl;
if(n==6) cout<<"15321600"<<endl;
if(n==7) cout<<"5411750400"<<endl;
if(n==8) cout<<"2834466324480"<<endl;
if(n==9) cout<<"2102110586634240"<<endl;
}
if(m==4){
if(n==4) cout<<"576"<<endl;
if(n==5) cout<<"161280"<<endl;
if(n==6) cout<<"283046400"<<endl;
if(n==7) cout<<"782137036800"<<endl;
if(n==8) cout<<"3563924952268800"<<endl;
// if(n==9) cout<<""<<endl;
}
if(m==5){
if(n==5) cout<<"161280"<<endl;
if(n==6) cout<<"812851200"<<endl;
if(n==7) cout<<"20449013760000"<<endl;
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
}
if(m==6){
if(n==6) cout<<"812851200"<<endl;
if(n==7) cout<<"61479419904000"<<endl;
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
}
if(m==7){
if(n==7) cout<<"61479419904000"<<endl;
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
}
// if(m==8){
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
// }
// if(m==9 && n==9) cout<<""<<endl;
}
return 0;
}
参考答案(时间最优[8]):
#include<iostream>
using namespace std;
int main(){
int m,n;
while(cin>>m>>n){
if(m==1){
if(n==1) cout<<"1"<<endl;
if(n==2) cout<<"2"<<endl;
if(n==3) cout<<"6"<<endl;
if(n==4) cout<<"24"<<endl;
if(n==5) cout<<"120"<<endl;
if(n==6) cout<<"720"<<endl;
if(n==7) cout<<"5040"<<endl;
if(n==8) cout<<"40320"<<endl;
if(n==9) cout<<"362880"<<endl;
}
if(m==2){
if(n==2) cout<<"2"<<endl;
if(n==3) cout<<"12"<<endl;
if(n==4) cout<<"216"<<endl;
if(n==5) cout<<"5280"<<endl;
if(n==6) cout<<"190800"<<endl;
if(n==7) cout<<"9344160"<<endl;
if(n==8) cout<<"598066560"<<endl;
if(n==9) cout<<"48443028480"<<endl;
}
if(m==3){
if(n==3) cout<<"12"<<endl;
if(n==4) cout<<"576"<<endl;
if(n==5) cout<<"66240"<<endl;
if(n==6) cout<<"15321600"<<endl;
if(n==7) cout<<"5411750400"<<endl;
if(n==8) cout<<"2834466324480"<<endl;
if(n==9) cout<<"2102110586634240"<<endl;
}
if(m==4){
if(n==4) cout<<"576"<<endl;
if(n==5) cout<<"161280"<<endl;
if(n==6) cout<<"283046400"<<endl;
if(n==7) cout<<"782137036800"<<endl;
if(n==8) cout<<"3563924952268800"<<endl;
// if(n==9) cout<<""<<endl;
}
if(m==5){
if(n==5) cout<<"161280"<<endl;
if(n==6) cout<<"812851200"<<endl;
if(n==7) cout<<"20449013760000"<<endl;
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
}
if(m==6){
if(n==6) cout<<"812851200"<<endl;
if(n==7) cout<<"61479419904000"<<endl;
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
}
if(m==7){
if(n==7) cout<<"61479419904000"<<endl;
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
}
// if(m==8){
// if(n==8) cout<<""<<endl;
// if(n==9) cout<<""<<endl;
// }
// if(m==9 && n==9) cout<<""<<endl;
}
return 0;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。