算法实验—分治算法
算法实验—分治算法
MokylinJay
Hello World!
展开
-
SDUTOJ 1018 - 骨牌铺方格
#include<bits/stdc++.h> using namespace std; // 类似斐波那契数列 // a1 = 1, a2 = 2 // a[i] = a[i-1] + a[i-2] int main() { long long a[60] = {0}; a[1] = 1; a[2] = 2; for (int i = 3; i <= 50; i++){ a[i] = a[i-1] + a[i-2]; }原创 2021-11-26 15:52:02 · 203 阅读 · 0 评论 -
SDUTOJ 3664 - 顺序表应用7:最大子段和之分治递归法
#include<bits/stdc++.h> using namespace std; int a[50010] = {0}; int count_num = 0; // 记录递归次数 int sum = 0; int maxSub(int l, int r) { count_num++; // 统计递归次数 if (l == r){ // 递归出口 if (a[l] > 0){ sum = a[l]; }原创 2021-11-26 15:34:43 · 192 阅读 · 0 评论 -
SDUTOJ 1710 - 众数问题
#include<bits/stdc++.h> using namespace std; // 定义mode记录众数值,mul记录众数重数 int mode = 0, mul = 0, n; // 该函数递归维护众数mode及重数mul void mode_func(int a[], int l, int r) { int mid = (l+r)/2; int count_num = 1; // 默认a[mid]的重数为1 int i, j; // 向左侧统计原创 2021-11-26 14:46:51 · 342 阅读 · 0 评论 -
SDUTOJ 1722 - 整数因子分解问题
#include<bits/stdc++.h> using namespace std; // 数组a[i]记录i有多少种分解方式 int a[500000]; // 求解x有多少种分解方式 long long func(int x) { // 默认一种,即x = x long long sum = 1; // 若x在50万以内,且已统计完分解方式,则直接返回 if ((x<500000) && a[x] != 0){ r原创 2021-11-26 16:23:53 · 142 阅读 · 0 评论