2019.1.1 洛谷1025

昨天学到了一个新词:蒟蒻。我居然在昨天才知道自己的名字,不由得感到羞愧万分。
然后明天考微积分,今天就做一个稍微简单一点的题练练手好了。。
这个题挺简单的,就是用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;
}

这个题虽然基础,但是等有时间还是看看大佬的算法吧。。真的觉得不但效率高而且代码行数少的那种算法好厉害啊:)然而唯一的缺点是。对我这种蒟蒻来说不太容易看懂。。
以及,明天微积分考试加油!

猜你喜欢

转载自blog.csdn.net/weixin_43484101/article/details/85536130