昨天学到了一个新词:蒟蒻。我居然在昨天才知道自己的名字,不由得感到羞愧万分。
然后明天考微积分,今天就做一个稍微简单一点的题练练手好了。。
这个题挺简单的,就是用k个数的和表示数n方法的种数。。
循环的话开个二维数组就行了,然而按照惯例,我还是用了递归。因为懒惰而辣鸡,最开始不优化算法还超时了。。
诶。
直接上代码。
#include<iostream>
using namespace std;
int n, k;
int nums=0;
int nu[202];
void func(int times,int sig)
{
if (times == k) {
nums++;
return;
}
for (int i = sig; i<=n-sig; i++)
{
nu[times] = i;
int u = 0;
for (int i = 1; i <= times; i++)u+=nu[i];
if(i>((n-u+i)/(k-times+1)))break;
func(times + 1, i);
}
}
int main()
{
cin >> n >> k;
func(1,1);
cout << nums;
//system("pause");
return 0;
}
这个题虽然基础,但是等有时间还是看看大佬的算法吧。。真的觉得不但效率高而且代码行数少的那种算法好厉害啊:)然而唯一的缺点是。对我这种蒟蒻来说不太容易看懂。。
以及,明天微积分考试加油!