题目链接:点击打开链接
相当水的DP,状态方程也很简单:dp(m,n)=dp(m,n-1)+dp(m-1,n),其中m<n的话排列的情况不存在。
dp的精髓就是状态方程。
#include <iostream>
#include <cstring>
using namespace std;
__int64 dp[21][21];
int main()
{
int m,n;
while(cin>>m>>n)
{
memset(dp,0,sizeof(dp));
if(m<n)
{
cout<<0<<endl;
continue;
}
else
{
for(int a=1;a<=m;a++)
{
dp[a][0]=1;
}
for(int i=1;i<=20;i++)
{
for(int j=1;j<=i;j++)
{
dp[i][j]=dp[i][j-1]+dp[i-1][j];
}
}
cout<<dp[m][n]<<endl;
}
}
return 0;
}