算法代碼

遞歸與分治

二分搜索:
//從小到大排好序的數(shù)組list[low:high]中查找x
int binarySearch(int *list,int low,int high,int x)
{
    int left=low;
    int right=high;
    while(left<=right)
    {
        int minddle(left+right)/2;
        if(list[middle]==x)return middle;
        if(list[middle]<x)
            left=middle+1;
        else
            right=middle-1;
    }
    return -1;
}

歸并排序:
//將a[low,mid]和a[mid+1,high]歸并
void merge(int* a,int low,int mid,int high)
{
    int i=low;
    int j=mid+1;
    for(int k=low;k<=high;k++)
    {
        aux[k]=a[k];
    }
    for(int k=low;k<=high;k++)
    {
        if(i>mid)
            a[k]=aux[j++];
        else if(j>high)
            a[k]=aux[i++];
        else if(aux[i]<aux[j])
            a[k]=aux[i++];
        else
            a[k]=aux[j++];
    }
}

void mergeSort(int *list,int low,int high)
{
    if(high<=low)return ;
    int mid=(low+high)/2;
    mergeSort(list,low,mid);
    mergeSort(list,mid+1,high);
    merge(list,low,mid,high);
}

快速排序:
void quickSort(int* list,int low,int high)
{
    if(low<high)
    {
        int q=partition(list,low,high);
        quickSort(list,low,q-1);
        quickSort(list,q+1,high);
    }
}
int partition(int* list,int low,int high)
{
    int i=low;
    int j=high+1;
    int x=a[low];
    while(true)
    {
        while(list[++i]<x&&i<r);
        while(list[--j]>x);
        if(i>=j)break;
        swap(list[i],list[j]);
    }   
    swap(list[low],list[j]);
    return j;
}

循環(huán)賽日程表:
void fun(int n){
    if (n==2){
        mp[1][1]=mp[2][2]=1;
        mp[1][2]=mp[2][1]=2;
        return ;
    }
    if (n>2) fun(n/2);
    int k=n/2;
    //進行復(fù)制
    for (int i=1;i<=k;i++)
        for (int j=1;j<=k;j++){
            mp[i+k][j+k]=mp[i][j];
            mp[i+k][j]=mp[i][j]+k;
            mp[i][j+k]=mp[i][j]+k;
        }
    return ;
}

動態(tài)規(guī)劃

矩陣連乘:
//m[i][j]代表Ai...Aj最小乘法運算次數(shù)
//s[i][j]記錄Ai...Aj中間加括號的位置
int memoizedMatrixChain(int n)
{
    for(int i=1;i<n;i++)
    {
        for(int j=i;j<=n;j++)
            m[i][j]=0;
    }
    return lookUpChain(1,n);
}
int lookUpChain(int i,int j)
{
    if(m[i][j]>0)
        return m[i][j];
    if(i==j)
        return 0;
    int u = lookUpChain(i+1,j) + p[i-1]*p[i]*p[j];
    s[i][j]=i;
    for(int k=i+1;k<j;k++)
    {
        int t=lookUpChain(i,k)+lookUpChain(k+1,j)+p[i-1]*p[k]*p[j];
        if(t<u)
        {
            u=t;
            s[i][j]=k;
        }
    }
    m[i][j]=u;
    return u;
}

最長公共子序列
#include <iostream>
#include <cstring>
using namespace std;
char sz1[1000];
char sz2[1000];
//maxLen[i][j]表示sz1左邊i個字符形成的子串压恒,與sz2左邊j個字符形成的子串的
//最長公共子序列長度,i续语,j從0開始算。
int maxLen[1000][1000];
int main()
{
    while(cin>>sz1>>sz2)
    {
        int length1=strlen(sz1);
        int length2=strlen(sz2);
        int nTmp;
        int i,j;
        for(i=0;i<=length1;i++)
            maxLen[i][0]=0;
        for(j=0;j<=length2;j++)
            maxLen[0][j]=0;
        for(i=1;i<=length1;i++)
        {
            for(j=1;j<=length2;j++)
            {
                if(sz1[i-1]==sz2[j-1])
                    maxLen[i][j]=maxLen[i-1][j-1]+1;
                else
                {
                    maxLen[i][j]=max(maxLen[i-1][j],maxLen[i][j-1]);
                }
            }
        }
        cout<<maxLen[length1][length2]<<endl;
    }
    return 0;
}

貪心算法

活動安排:
struct action
{
    int begin;
    int end;
}a[1000];
int n;//活動總數(shù)
int sum=0;//能參加的活動的數(shù)量
void search()
{
    sort(a);//按照結(jié)束時間排序
        sum=1;
    int temp=a[0].end;
    for(int i=1;i<n;i++)
    {
        if(a[i].begin>=temp)
        {
            sum++;
            temp=a[i].end;
        }
    }
}

搬桌子:
#include <iostream>
using namespace std;

struct 
{
    int start;
    int end;
}a[100];
bool used[100];
int main()
{
    sort(a,n);//按照start將a數(shù)組排序
    int min=0;
    int num=0;
    while(num<n)
    {
        int temp=0;
        for(int i=0;i<n;i++)
        {
            if(!used[i]&&a[i].start>=temp)
            {
                temp=a[i].end;
                used[i]=true;
                num++;
            }
        }
        min++;
    }
}

回溯算法

最大裝載
//r代表剩余集裝箱的重量和
void backtrack(int i)
{
    if(i>n)
    {
        if(cw>bestw)
            bestw=cw;
        return ;
    }
    r-=w[i];
    if(cw+w[i]<c)
    {
        cw+=w[i];
        backtrack(i+1);
        cw-=w[i];
    }
    if(cw+r>bestw)
    {
        backtrack(i+1);
    }
    r+=w[i];
}

八皇后
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末厦画,一起剝皮案震驚了整個濱河市疮茄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌根暑,老刑警劉巖力试,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異排嫌,居然都是意外死亡畸裳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門淳地,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怖糊,“玉大人,你說我怎么就攤上這事颇象∨畛” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵夯到,是天一觀的道長。 經(jīng)常有香客問我饮亏,道長耍贾,這世上最難降的妖魔是什么阅爽? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮荐开,結(jié)果婚禮上付翁,老公的妹妹穿的比我還像新娘。我一直安慰自己晃听,他們只是感情好百侧,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著能扒,像睡著了一般佣渴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上初斑,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天辛润,我揣著相機與錄音,去河邊找鬼见秤。 笑死砂竖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鹃答。 我是一名探鬼主播乎澄,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼测摔!你這毒婦竟也來了置济?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤避咆,失蹤者是張志新(化名)和其女友劉穎舟肉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體查库,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡路媚,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了樊销。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片整慎。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖围苫,靈堂內(nèi)的尸體忽然破棺而出裤园,到底是詐尸還是另有隱情,我是刑警寧澤剂府,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布拧揽,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏淤袜。R本人自食惡果不足惜痒谴,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铡羡。 院中可真熱鬧积蔚,春花似錦、人聲如沸烦周。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽读慎。三九已至漱贱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贪壳,已是汗流浹背饱亿。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留闰靴,地道東北人彪笼。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子孽亲,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容