1 条题解
-
0
问题背景
在这个问题中,有不同类型的珠子,苏丹喜欢特定的珠子组合。需要根据给定的珠子组合和饰带长度,计算出可以形成的不同饰带的数量。
所有代码
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int dp[110][610]; int g[610][610]; char da[610][110]; int check(string a,string b) { for(int i=1;i<a.size();i++) { if(a[i]!=b[i-1]) { return false; } } return true; } int main() { while(1) { int n,l,m; //cin>>n>>l>>m; scanf("%d%d%d",&n,&l,&m); if(n==0 && l==0 && m==0) { break; } memset(dp,0,sizeof(dp)); memset(g,0,sizeof(g)); for(int i=0;i<m;i++) { //cin>>da[i]; scanf("%s",da[i]); } for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { if(check(da[i],da[j])) { g[i][j]=1; } } } /* for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { cout<<g[i][j]<<" "; } cout<<endl; }*/ int len=strlen(da[0]); for(int i=0;i<m;i++) { dp[len][i]=1; } for(int k=len;k<=l;k++) { for(int i=0;i<m;i++) { for(int j=0;j<m;j++) { if(g[i][j]==1) { dp[k+1][i]+=dp[k][j]; } } } } int ans=0; for(int i=0;i<m;i++) { ans=ans+dp[l][i]; } cout<<ans<<endl; } return 0; }
- 1
信息
- ID
- 619
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者