ACM算法基础篇
基础算法有:枚举,递推,贪心,,分治,递归,构造,模拟,排序和检索
1、枚举:也叫穷举,是从问题所有可能解中一一枚举个元素,用题目给的检验条件判定哪些是无用的,那些是有用的,符合的解即为答案。优点是算法简单,缺点是当问题的规模变大时,效率低。枚举很慢!!!我只是举例这个复杂的代码哈,其他优化方法有很多的,可以参考其他博客大佬呀
例题:百钱买百鸡100块钱,公鸡3元一只,母鸡5元一只,小鸡1元一只,问:各买多少合适?

#include <stdio.h>
#include <stdlib.h>int main()
{int x,y,z;for(x=0;x<=100;x++){for(y=0;y=100;y++){for(z=0;z=100;z++){if(x+y+z==100&&3*x+5*y+z/3==100&&z%3==0)printf("%d%d%d\n",x,y,z);}}}
}

2、递推;递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法(有顺推和逆推两种)。
顺推:斐波那契数列*F(n)=F(n-1)+(n-2)
逆推:例如————-银行存款,年利息是0.03,若要在n年后连本带利取出m元,至少要存多少?
3、贪心算法
在对问题求解时,总是做出在当前看来是最好的选择,不从整体最优考虑,从局部考虑最优解.注意(不是所有都适合,要分析题目)某个状态不影响当前状态
例如:*合并果子有n堆果子,第一堆有ai个,现在要合并成一堆,每次合并的代价是两堆果子的总果子数,求合并的所有果子的最小代价
每次选取最少的两堆合并,直到剩一堆即可
证明:首先假设合并之后只是把两堆搬到一起,不合并,
那么,合并x,y,堆所消耗的体力就是组成x的堆的果子数+组成y的果子数
这样,假设某一堆t,被某一堆合并,有被某一堆合并并。。。重复m次,
那么简单考虑这个t堆,它所消耗的体力将会是m*果子数(t),
**m(1)*果子数(1)+m(2)果子数(2)+。。。+m(n)果子数m(n) 而果子数是一定的,(因为合并次数一定),所以我们只需要使果子数大的那一堆的m尽量小,使果子数小的那一堆的m尽量大, 每次选取最少的两堆合并,直到剩一堆即可

 sort(a,a+n);//先排序int ans=0;for(int i=1;i<n;++i){a[i]+=a[i-1];//合并ans+=a[i];int tmp=a[i];for(int j=i+1;j<n&&a[j]<a[i];++j){a[j-1]=a[j];a[j]=tmp;}}printf("%d\n",ans);

4、递归直接或间接调用自身函数或者方法的算法。(不太好理解,没关系,慢慢来~)递归对资源消耗很大,尽量避免!!
例如:

  int F(int n){if(n<=1){return 1;}//递归结束条件return F(n-1)+F(n-2)//调用自身}

5、分治就是把一个复杂的问题分成两个或更多相同或相似的子问题,再把子问题分解成更小的问题(递归)…直到最后子问题可以简单地直接得求解,解这些子问题,然后将各子问题合并得到元问题的解。三步:分解–解决–合并
例题:在n个元素中找出最大元素和最小元素

void maxAndim(int A[],int i,int j,int &max,int &min)//传入一个数组
{if(j==i){max=min=A[i];return;}if(j-1==i){max=A[i]>A[j]?A[i]:A[j];min=A[i]>A[j]?A[i]:A[j];return;}//递归结束条件,最小子问题的解int mid,max1,max2,min1,min2;mid=(i+j)/2;maxAndim(A,i,mid,max1,min1);maxAndim(A,mid+1,max2,min2);//问题分解max=max1>max2?max1:max2;min=ax1>max2?max1:max2;//解的合并
}

6、构造(复杂的不太会哈~举个简单的例子吧)
例题:输出n个以空格分隔的“AC”。

 for(int i=1;i<n;++i){printf("AC");}printf("AC\n");

7、模拟最直观的算法,通常是对某一类事件进行描述,通过事件发生的先后顺序进行输入输出。(很适合我们程序设计的初学者呐~)
例如:一元n次多项式f(x)=aXn+…!=0;
1、多项式中自变量为x,从左往右按照次数递减顺序给出多项式
2、多项式中只包含系数不为0的项
。。。。。。。。(好多啊,不举了吧)

for(int i=n;i>=0;i--){scanf("%d",&a);if(i!=n&&a>0){printf("+");//根据正负,是否为最高此项决定加号}if(abs(a)>1||i==0){printf("%d",a);输出系数}if(a==-1&&i){printf("-");//-1系数特判,常数项已特判}if(i>1)//二次项及以上输出{printf("x%d",i);}if(i==1)//一次项{printf("x");}}

8、排序很多了,排序法非常多,冒泡排序,快速排序,选择排序,插入排序(sort ),堆排序…等

 sort(a,a+n);//对数组a从小到大排序,使用<进行比较sort(b,b+n,cmp);//对数组b按照函数cmp指定的规则排序,使用cmp函数比较sort(c.begin(),c.end());//用迭代器控制排序范围,多用于STL中的数据结构
struct Node{int x,y;};bool cmp(const Node &a,(const Node &b)//结构体中排序{return a.y>b.y;}

9、检索有顺序查找,二分查找,插值查找,动态查找等
例子

int binary_search(int a[],int n.int key)
{int m,l=0,r=n-1;while(l<r){m=l+((r-1)>>1);//元素相同时求下标最小//m=l+((r+l-1)>>1);元素相同时求下标最大if(a[m]<key){l=m+1;}else{r=m;}}if(a[r]==key){return r;}return -1;
}

ACM算法之基础算法相关推荐

  1. java基础之算法_java基础算法

    package com.sxwl; import org.springframework.boot.SpringApplication; import org.springframework.boot ...

  2. 算法基础课-基础算法

    第一讲 基础算法 快速排序 归并排序 二分 整数二分模板 AcWing 789. 数的范围(整数二分法) AcWing 1236.递增三元组 AcWing 730. 机器人跳跃问题 AcWing 12 ...

  3. BPR贝叶斯个性化推荐算法—推荐系统基础算法(含python代码实现以及详细例子讲解)

    BPR贝叶斯个性化排序算法 一.问题导入 二.显示反馈与隐式反馈 2.1 显式反馈与隐式反馈基本概念 2.2 显式反馈与隐式反馈的比较 2.3 显式反馈与隐式反馈的评价方法 2.3.1 显式反馈数据模 ...

  4. python实现快速排序算法_基础算法:快速排序(python实现)

    算法原理 快速排序是一个具有较高性能的排序算法,其主要思想如下: 对数组中的某个元素,确定其在数组中的排序位置,即在其之前的所有元素均小于该元素,在其之后的均大于该元素.对小元素组和大元素组同样执行该 ...

  5. -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...

    题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...

  6. 实现链栈的各种基本运算的算法_LeetCode基础算法题第78篇:如何不用加减号实现两数的加法运算?...

    一直很纠结算法的文章应该怎么写.最后觉得还是从最简单的level开始写吧,一开始就弄些重量级的,什么人工智能,机器学习的算法,还要有大量的数学以及优化的知识,小白们估计会很郁闷,当然我也不一定能做出来 ...

  7. java程序员基础算法_java基础算法

    冒泡排序 图解 编码实现 public class Sort { public static void main(String[] args) { //通过冒泡排序给当前的数字进行排序(升序) int ...

  8. 「ACM-ICPC基础算法」

    系列文章目录 本系列文章是关于<ACM-ICPC算法竞赛基础算法>的文章! 零.题目介绍 有排成一行的n个方格( 0 < n <= 50),用红.粉.绿三种颜色涂每个格子, 每 ...

  9. 暑期集训2:ACM基础算法 练习题G:POJ - 1298

    2018学校暑期集训第二天--ACM基础算法 练习题G  --  POJ - 1298 The Hardest Problem Ever Julius Caesar lived in a time o ...

最新文章

  1. OpenCV 中的图像处理 004_平滑图像
  2. curl上传文件linux,在Linux中如何使用curl从一个服务器流式传输文件到另一个服务器(有限的服务器资源)...
  3. python 逐行读取csv_在R中如何逐行读取CSV文件并将内容识别为正确的数据类型?...
  4. js数组的拷贝赋值复制二三事总结
  5. python使用ide_python使用什么ide?[关闭]
  6. 20190601:第一个JDBC程序
  7. 关于反射程序集的心得
  8. 【算法导论】【排序】—— 计数排序(counting sort)
  9. watson语音识别下载
  10. ie浏览器float right 向下错位解决办法
  11. 斯坦福大学CS143编译原理课程笔记:3.编译器的性价比
  12. P2799国王的魔镜
  13. 【渝粤题库】国家开放大学2021春2737市场调查与商情预测题目
  14. python递归函数基例_函数和代码复用 --Python
  15. 晨风机器人回复词库_qq机器人词库大全下载
  16. 01-mnist数字识别
  17. 产品做出来了,我们该怎么办?
  18. 【MySQL基础篇】MySQL数据库安装教程
  19. 直播常见问题原因汇总
  20. linux配置mysql全局环境变量,Linux 配置 jdk mysql 环境变量

热门文章

  1. 宝妈适合学计算机方面的什么,适合宝妈的成考专业 学什么专业前景好
  2. 拉萨-香港-海口-丽江4日游攻略
  3. 产业经济专题:产业结构高级化、合理化指数、工业化率、机构水平化及产业升级度
  4. Exp2 后门原理与实践
  5. uniapp禁止下拉页面
  6. 虚拟仪器课程设计-音乐喷泉
  7. 技术爆炸中的蒙日:安培方程
  8. speedtest命令行linux,Linux通过命令行使用speedtest宽带测速
  9. 2023基于springboot的健身房管理系统(mysql)-JAVA.VUE(论文+开题报告+运行)
  10. 120306 php,LAMP搭建之源码篇