我发现这码蹄集里是相当喜欢出模拟和数学题啊,这题乍看还以为要用dp呢,其实还是一个简单的数学问题。前w天饭不重复,显然如果w大于供饭天数n, 则一定重复;如果供餐数目k小于3*w, 则前w天也一定重复。以上条件均不满足,那答案就是从k顿饭里选择出3w顿饭并排列的方案数了(相同饭但供应顺序不一样也算是不同的方案):
即公式
C++ 代码如下:
#include <iostream>
using namespace std;
int A(int k, int n)
{
int a = 1;
for (int i = n - k + 1; i <= n; i ++ )
a *= i;
return a;
}
int main()
{
int n, k, w;
cin >> n >> k >> w;
int res = 0;
if (3 * w > k || w > n) res = 0;
else res = A(3 * w, k);
cout << res << endl;
return 0;
}