请问这个题怎么做

骑猪大侠 2019-12-04 10:36:58
两个包含N个元素的数组,元素分别是a1,a2,...,an;和b1,b2,...,bn,将a和b的元素两两对位相乘并求和。 a1*b1 + a2*b2 + ...... an * bn = sum1 如果将数组b右移一位,末尾的元素补在第1位,则得到sum2 a1*bn + a2*b1 + a3*b2...... an*b(n-1) = sum2 (继续右移并重复上面的操作) ...... a1*b2 + a2 * b3 + ...... an*b1 = sumn 求sum1至sumn中的最大值。
...全文
56 点赞 收藏 13
写回复
13 条回复
真相重于对错 2019年12月04日
上边有点错 sumTmp += arrA[j] * arrB[(j + i) % SIZE];
回复 点赞
真相重于对错 2019年12月04日

int arrA[] = { 。。。。。。。 };
	int arrB[] = {。。。。。。。 };
	int SIZE = sizeof(arrA) / sizeof(int);
	int sumMax = INT32_MIN;
	for (int i = 0; i < SIZE; i++)
	{
		int sumTmp = 0;
		for (int j = 0; j < SIZE; j++)
		{
			sumTmp += arrA[j] * arrB[(j + i) % 3];
		}
		if (sumTmp > sumMax)
			sumMax = sumTmp;
	}
cout<<sumMax<<endl;
回复 点赞
lin5161678 2019年12月04日
5e4 才625
随便O(n*n)完事了
回复 点赞
智者知已应修善业 2019年12月04日
123456789 123456789 987654321 有序反序,无序循环https://bbs.csdn.net/topics/395236099.
回复 点赞
骑猪大侠 2019年12月04日
n的最大值5e4,ai和bi小于等于128
回复 点赞
骑猪大侠 2019年12月04日
引用 10 楼 _肆 的回复:
一个投机取巧的方法:如果你的目的只是“求sum1至sumn中的最大值”,而不是打印所有sum的话,把a和b做排序,小乘小,大乘大,求出来的和不就是最大吗
这样顺序就变化了,仔细看看题
回复 点赞
骑猪大侠 2019年12月04日
引用 7 楼 你可以永远相信自己 的回复:
[quote=引用 3 楼 lin5161678 的回复:] 5e4 才625 随便O(n*n)完事了
2.5*10e9肯定会超时呀[/quote] 2.5e9肯定超时不用想
回复 点赞
骑猪大侠 2019年12月04日
本题已解决,fft可做,复杂度nlogn Σai * x^i * Σbi*x^n+1-i (i从1取到n, 相应的sum1就是x^(n+1)的系数,sum2是x^(n+2)和x^2的系数之和,sumn是x^(n+n)和x^n的系数和 
回复 点赞
_肆 2019年12月04日
一个投机取巧的方法:如果你的目的只是“求sum1至sumn中的最大值”,而不是打印所有sum的话,把a和b做排序,小乘小,大乘大,求出来的和不就是最大吗
回复 点赞
lin5161678 2019年12月04日
引用 7 楼 你可以永远相信自己 的回复:
[quote=引用 3 楼 lin5161678 的回复:] 5e4 才625 随便O(n*n)完事了
2.5*10e9肯定会超时呀[/quote]n最大值 5e4 你是不是记错了 哪里来的 2.5*10e9
回复 点赞
骑猪大侠 2019年12月04日
引用 5 楼 真相重于对错 的回复:
上边有点错 sumTmp += arrA[j] * arrB[(j + i) % SIZE];
1s的限制,n^2过不了
回复 点赞
骑猪大侠 2019年12月04日
引用 3 楼 lin5161678 的回复:
5e4 才625 随便O(n*n)完事了
2.5*10e9肯定会超时呀
回复 点赞
寻开心 2019年12月04日
n *128*128 是9位数, 一个32位的int最大32位最大可以赋值为:2147483647是10位数够了,不会溢出
剩下的就是双重循环,一重模拟移位,一重模拟乘法求和并比较大小,
没有什么难度
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告