题目描述
著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字。 例如:
+ L K V E
L L K V E
K K V E KL
V V E KL KK
E E KL KK KV
其含义为:
�+�=�L+L=L,�+�=�L+K=K,�+�=�L+V=V,�+�=�L+E=E
�+�=�K+L=K,�+�=�K+K=V,�+�=�K+V=E,�+�=��K+E=KL
⋯⋯
�+�=��E+E=KV
根据这些规则可推导出:�=0L=0,�=1K=1,�=2V=2,�=3E=3。
同时可以确定该表表示的是 44 进制加法。
输入格式
第一行一个整数 �n (3≤�≤93≤n≤9)表示行数。
以下 �n 行,每行包括 �n 个字符串,每个字符串间用空格隔开。)
若记 ��,�si,j 表示第 �i 行第 �j 个字符串,数据保证 �1,1=+s1,1=+,��,1=�1,�si,1=s1,i,∣��,1∣=1∣si,1∣=1,��,1≠��,1si,1=sj,1 (�≠�i=j)。
保证至多有一组解。
输出格式
第一行输出各个字母表示什么数,格式如:L=0 K=1
⋯⋯ 按给出的字母顺序排序。不同字母必须代表不同数字。
第二行输出加法运算是几进制的。
若不可能组成加法表,则应输出 ERROR!
。
输入输出样例
输入 #1复制
5 + L K V E L L K V E K K V E KL V V E KL KK E E KL KK KV
输出 #1复制
L=0 K=1 V=2 E=3 4
#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005];
int main() {
int n,k;
cin>>n>>k;
for(int i=1; i<=n; i++) {
for(int j=1; j<=k; j++) {
if(i<j)
continue;
else if(i==1)
dp[i][j]=1;
else
dp[i][j]=dp[i-1][j-1]+dp[i-j][j];
}
}
cout<<dp[n][k];
}