#include <iostream>
#include <string>
#include <memory.h>
using namespace std;
int d[3001][3001];
int s;
string str;
//
//int dp(int len, int s)
//{
//
// if(s==0)return 1;
// if(s<0) return 0;
// if(len==1) {
// if(s<=25 && s>=0) return 1;
// else return 0;
// }
// //cout<<len<<" "<<s<<endl;
// int &ret = d[len][s];
// if(ret != -1) return ret;
//
// ret = (dp(len-1,s) + dp(len, s-1) - dp(len-1,s-26)) % 1000000007;
// return ret;
//}
int main()
{
cin>>s>>str;
int len = str.length();
for(int i=0; i<=len; i++)
d[i][0] = 1;
for(int i=0; i<=25; i++)
d[1][i] = 1;
for(int l = 2; l<= len; l++)
{
for(int k = 1; k<= s; k++)
{
if( k >= 26)
d[l][k] = ((d[l-1][k] + d[l][k-1])%1000000007 - d[l-1][k-26] + 1000000007)%1000000007;
else
d[l][k] =( d[l-1][k]+d[l][k-1])%1000000007;
}
}
cout<<d[len][s];
}
'알고리즘 > BOJ문제풀이' 카테고리의 다른 글
boj 14699 관악산 등산 (0) | 2017.09.27 |
---|---|
345번째 문제 - 3042번 트리플렛 (0) | 2017.01.18 |
1520 내리막길 (0) | 2016.12.30 |
295번째 문제 - 1994 등차수열 (1) | 2016.12.28 |
272번째 문제 - 2494 숫자 맞추기 (0) | 2016.12.22 |