枚举全排列

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int main()
{
/**
枚举ABC 的全排列
*/
for(char a='A'; a<='C'; a++)
{
for(char b='A'; b<='C'; b++)
{
if(a==b) continue;
for(char c='A'; c<='C'; c++)
{
if(c==a||c==b)continue;
else
cout<<a<<" "<<b<<" "<<c;
}
cout<<endl;
}
}
return 0;
}

解决匹配算式问题

ABCD * E = DCBA

数的范围最小值在 1023 最大值在 9876

方式解决拆分:

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int main()
{
int num1,num2,A,B,C,D,E;
for(num1=1023;num1<=9876;num1++){
A=num1/1%10;
B=num1/10%10;
C=num1/100%10;
D=num1/1000%10;
if(D==0||A==B||A==C||A==D||B==C||B==D||C==D)continue;
num2=A*1000+B*100+C*10+D;
for(E=2;E<=9;E++){
if(E==A||E==B||E==C||E==D)continue;
if(E*num1==num2){
cout<<num1<<"*"<<E<<"="<<num2;
}
cout<<endl;
}
} return 0;
}

贪心解决 最值问题

规则: 利用局部最优解 加起来求总的 全局最优解是贪心法的主要规则

例: 在 5 6 2 9 4 1 求能组成的饿最大三位数

难点: 位数如何去控制 ,可以考虑使用 循环除 缩小 范围的方式安排

for(int a=100;a>0;a/=10;)

#include <iostream>
#include <cstring>
#include <string>
using namespace std; int main()
{
int pro[]={5,6,2,9,4,1};
int current=0,MAX=10;int num=0;
int len=sizeof(pro)/sizeof(pro[0]);
for(int a=100;a>0;a/=10){
current=0;/归位
for(int b=0;b<len;b++){
if(pro[b]>current&&pro[b]<MAX){
current=pro[b];
}
}
MAX=current;
num+=current*a;
}
cout<<num;
return 0;
}

二分查找

思想 : 在一组 确定排好序的 数组中 定位中点 把需要查找的值与中间的值进行比较如果是相同的值 ,则找到,如果不是又比当前值大 则继续在右边进行查找, 小于则继续在左边值进行查找, 直到找到位置.

复杂度为 线性序列

#include <iostream>
#include <algorithm>
#include <string>
using namespace std; int main()
{
int pro[]={5,6,2,9,4,1,25,65,24,15,77};
sort(pro,pro+sizeof(pro)/sizeof(pro[0]));
int low ,mid,high;
low=0;high=sizeof(pro)/sizeof(pro[0])-1;
int findn;
cin>>findn;
while(low<=high){
mid=(low+high)/2;
if(pro[mid]==findn) break;
if(findn>pro[mid]){
low=mid+1;
}else{
high=mid-1;
}
}
if(low>high) cout<<"no find";
else
cout<<"find x:"<<mid; return 0;
}

暴力枚举子串

外两成循环的维持梯度控制,最后一层循环维持如果存在子串 那么继续拆分。

#include <iostream>
#include <string>
#include <vector>
using namespace std; int main(){ string str;
cin>>str;
char a[str.length()];
int i,j,k;
for(i=0;i<str.length();i++){
for(j=i;j<str.length();j++){
for(k=i;k<=j;k++){
a[k-i]=str[k];
}
a[j-i+1]='\0';
cout<<a<<endl;
}
} return 0;
}

LCS问题

package com.dsw.test;

public class CalculateMaxString {

	public static void main(String[] args) {
String src = "abcdefghijklmnopqrstuvwxyz";
String tar = "1234567890abcdfrgtddd12321414";
char [] srcCh = src.toCharArray();
char [] tarCh = tar.toCharArray();
int count = 0;
int max = 0;
StringBuilder sb = null;
String maxString = null;
for(int i=0;i<srcCh.length;i++)
for(int j=0;j<tarCh.length;j++){
sb = new StringBuilder();
int k=j;
int m = i;
count = 0;
while(srcCh[m] == tarCh[k]){
count++;
sb.append(tarCh[k]);
k++;
m++;
}
if(count > max){
max = count;
maxString = sb.toString();
}
}
System.out.println("原字符串:" + src);
System.out.println("子字符串:" + tar);
System.out.println(maxString);
} }

C++ 排列最优解算法思想的更多相关文章

  1. 机器学习&数据挖掘笔记(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 作者:tornadomeet 出处:http://www.cnblogs.com/tornadomeet 前言: 找工作时( ...

  2. [转]机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

    机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 转自http://www.cnblogs.com/tornadomeet/p/3395593.html 前言: 找工作时(I ...

  3. 排列组合算法(PHP)

    用php实现的排列组合算法.使用递归算法,效率低,胜在简单易懂.可对付元素不多的情况. //从$input数组中取$m个数的组合算法 function comb($input, $m) { if($m ...

  4. C#语法灵活运用之排列组合算法

    今天群里有朋友求一个排列组合算法,题目是给定长度,输出所有指定字母的组合. 如指定字母a.b.c.d.e.f,长度为2,则结果应为:aa.ab.ac ... ef.ff. 有朋友给出算法,很有特色: ...

  5. AC自动机——多模式串匹配的算法思想

    标准KMP算法用于单一模式串的匹配,即在母串中寻求一个模式串的匹配,但是现在又存在这样的一个问题,如果同时给出多个模式串,要求找到这一系列模式串在母串存在的匹配个数,我们应该如何处理呢? 基于KMP算 ...

  6. JVM三种垃圾收集算法思想及发展过程

    JVM垃圾收集算法的具体实现有很多种,本文只是介绍实现这些垃圾收集算法的三种思想和发展过程.所有的垃圾收集算法的具体实现都是遵循这三种算法思想而实现的. 1.标记-清除算法 标记-清除(Mark-Sw ...

  7. 排列熵算法简介及c#实现

    一.   排列熵算法简介: 排列熵算法(Permutation Entroy)为度量时间序列复杂性的一种方法,算法描述如下: 设一维时间序列: 采用相空间重构延迟坐标法对X中任一元素x(i)进行相空间 ...

  8. 基本算法思想Java实现的详细代码

    基本算法思想Java实现的详细代码 算法是一个程序的灵魂,一个好的算法往往可以化繁为简,高效的求解问题.在程序设计中算法是独立于语言的,无论使用哪一种语言都可以使用这些算法,本文笔者将以Java语言为 ...

  9. 基本算法思想之递推算法思想(C++语言描述)

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...

随机推荐

  1. 关于在Editplus中设置内容提示比如syso的快捷输出的方法

    在Editplus中默认的内容提示是很少的,比如我们最常用的syso快捷输出就没有,那么怎么来设置呢? 首先打开工具-首选项: 然后打开文件类型及语法-在文件类型中打开Java,如图: 然后打开 我们 ...

  2. 1-6 hibernate映射集合属性

    1.集合类框架 以Tree开头都是按顺序,默认情况下是升序排列. 以Linked 开头的都是按插入顺序排列的. 2.在hibernate中要持久化集合属性时必须将其声明为接口,如 private Se ...

  3. 使用nodegrass简单封装http请求例子

    1.项目中经常性的使用http发送请求处理数据.而大部分请求方式为get和post,于是对http请求进行封装,提供代码的利用率. 2.nodegress是nodejs的一个请求工具. 具体步骤及代码 ...

  4. linux 的tee命令

    tee 如果你在linux下希望将程序或命令运行的信息,在输入到文件的同时,也能够显示在屏幕上,你可以考虑使用tee这个命令.举个例子,直接上图 这里我调用函数aaa来完成将结果输入到aaa.log里 ...

  5. Spring Boot 引入自定义yml

    喜欢yml配置文件格式的人性化,也喜欢properties配置文件管理方式的人性化, 那么下面我们就来看一下 yml 是如何配置和使用类似properties管理方式的人性化. 配置文件 设置Spri ...

  6. STL --> find()和find_if()

    find()和find_if() 一.find()函数 find(first, end, value); // 返回区间[first,end)中第一个值等于value的元素的位置.如果没有找到匹配元素 ...

  7. Divisor counting [线性筛积性函数]

    Divisor counting 题目大意:定义f(n)表示整数n的约数个数.给出正整数n,求f(1)+f(2)+...+f(n)的值. 注释:1<=n<=1000,000 想法:我们再次 ...

  8. sqlite的limit使用

    如果我要取11-20的Account表的数据,则为: Select * From Person  Limit 9 Offset 10;表示从Person  表获取数据,跳过10行,取9行 .也可以这样 ...

  9. android中与SQLite数据库相关的类

    为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...

  10. Vim编辑器的注释,解注,删除与恢复

    1. 注释: 将光标移动到注释首部 命令模式下 Ctrl+V,进入列模式 上下移动,选中待注释内容 按大写I,进入插入模式 输入 // or # 按两次退出 2 解注 将光标移动到待解注首部 命令模式 ...