特殊狀態(tài)的枚舉

模板

bool used[MAX_N];
int perm[MAX_N];

//生成{0葛碧,1谴轮,2,3吹埠,4……n-1}的n第步!中排列 

void permutation1(int pos,int n){
    if(pos==n){
//這里編寫需要對perm進(jìn)行的操作 
        return;
    }

//針對perm的第pos個位置,究竟使用0~n-1中的哪一個進(jìn)行循環(huán)
    for(int i=0;i<n;i++){
        if(!used[i]){
            perm[pos]=i;
 //i已經(jīng)被使用了缘琅,所以把標(biāo)志設(shè)置為true
            used[i]=true;
            permutation1(pos+1,n);
//返回后將標(biāo)志復(fù)位粘都;
            used[i]=false; 
        }
    } 
    return;
}

第二種:用STL的函數(shù)next_permutation函數(shù)

#include <algorithm>

//即使有重復(fù)的元素也會生成所有的排列
//next_permutation是按照字典序來生成下一個排序的
int perm2[MAX_N];

void permutation2(int n){
    for(int i=0;i<n;i++){
        perm2[i]=i;
    }
    do{
//這里編寫需要對perm2進(jìn)行的操作 
    }while(next_permutation(perm2,perm2+n));
//所有的排序都生成后,next_permutation會返回false
    return; 
} 

真實感想

這個模板一開始看的時候覺得有點(diǎn)像中大的A題刷袍,但看得我一臉懵逼翩隧,然后就上網(wǎng)找了模板題

描述
小明十分聰明,而且十分擅長排列計算呻纹。比如給小明一個數(shù)字5堆生,他能立刻給出1-5按字典序的全排列专缠,如果你想為難他,在這5個數(shù)字中選出幾個數(shù)字讓他繼續(xù)全排列淑仆,那么你就錯了涝婉,他同樣的很擅長。現(xiàn)在需要你寫一個程序來驗證擅長排列的小明到底對不對蔗怠。
輸入
第一行輸入整數(shù)N(1<N<10)表示多少組測試數(shù)據(jù)墩弯,每組測試數(shù)據(jù)第一行兩個整數(shù) n m (1<n<9,0<m<=n)
輸出
在1-n中選取m個字符進(jìn)行全排列,按字典序全部輸出,每種排列占一行寞射,每組數(shù)據(jù)間不需分界渔工。如樣例
樣例輸入
2
3 1
4 2
樣例輸出
1
2
3
12
13
14
21
23
24
31
32
34
41
42
43

代碼如下【方法1】

#include <bits/stdc++.h>
using namespace std;
int n,r;
bool used[100];
int perm[100];
//從1 2……中選r個數(shù)
void permutation(int pos,int r){
    if(pos==r){
            for(int i=0;i<r;i++)
            cout<<perm[i];
        cout<<endl;
        return;
    }
    for(int i=1;i<=n;i++){
        if(!used[i]){
            used[i]=true;
            perm[pos]=i;
            permutation(pos+1,r);
            used[i]=false;
        }
    }
}

int main(){
    int cas;
    cin>>cas;
    while(cas--){
        cin>>n>>r;
        permutation(0,r);
    }
    return 0;
}

【方法2】

#include <bits/stdc++.h>
using namespace std;
int n,r;
bool used[100];
int perm[100];
//從1 2……中選r個數(shù)
void permutation(int n){
    for(int i=1;i<=n;i++){
        perm[i]=i;
    }
    do{
        for(int i=1;i<=r;i++)
            cout<<perm[i];
        //cout<<endl;   
    }while(next_permutation(perm+1,perm+n+1));    
//在這里perm會重新排序,不建議用此種方法桥温,會重復(fù)
    return;
}

int main(){
    int cas;
    cin>>cas;
    while(cas--){
        cin>>n>>r;
        permutation(n);
    }
    return 0;
}

Min-Max

搞了幾天的題目終于想清楚了引矩,看了permutation按照自己的邏輯打了一下,不確定對不對侵浸,畢竟沒有按題解來



期望其實就是每次排列得出的結(jié)果之和脓魏,因為期望=b[m]/n!,結(jié)果是所有b[m]之和/n!*n!,結(jié)果就是所有b[m]之和啦

代碼如下

#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
int n,r;
char m1[1001][3];
char f1[1001],f2[1001];
int num1[1001],num2[1001];
int a[1001],b[1001];
int permutation(int n){
    int sum=0;
    for(int i=1;i<=n;i++){
        a[i]=i;
    }

    do{ 
        if(strcmp("max",m1[0])==0){
            b[1]=max(a[num1[1]],a[num2[1]]);
        }
        else
            b[1]=min(a[num1[1]],a[num2[1]]);
    
        for(int i=2;i<=r;i++){
            if(strcmp("max",m1[i])==0){
                if(f1[i]=='a'&&f2[i]=='a')
                    b[i]=max(a[num1[i]],a[num2[i]]);
                else if(f1[i]=='a'&&f2[i]=='b')
                    b[i]=max(a[num1[i]],b[num2[i]]);
                else if(f1[i]=='b'&&f2[i]=='a')
                    b[i]=max(b[num1[i]],a[num2[i]]);
                else if(f1[i]=='b'&&f2[i]=='b')
                    b[i]=max(b[num1[i]],b[num2[i]]);
                }    
            else{
                if(f1[i]=='a'&&f2[i]=='a')
                    b[i]=min(a[num1[i]],a[num2[i]]);
                else if(f1[i]=='a'&&f2[i]=='b')
                    b[i]=min(a[num1[i]],b[num2[i]]);
                else if(f1[i]=='b'&&f2[i]=='a')
                    b[i]=max(b[num1[i]],a[num2[i]]);
                else if(f1[i]=='b'&&f2[i]=='b')
                    b[i]=max(b[num1[i]],b[num2[i]]);
            }
            sum+=b[r];
        }   
    }while(next_permutation(a+1,a+n+1));
    return sum;
}

int main(){
    int n;
//      freopen("data","r",stdin);
    cin>>n>>r;
    for(int i=1;i<=r;i++){
        scanf("%s %c %d %c %d",m1[i],&f1[i],&num1[i],&f2[i],&num2[i]);
    }
    int sum=permutation(n);
    cout<<sum;
    return 0;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末通惫,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子混蔼,更是在濱河造成了極大的恐慌履腋,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惭嚣,死亡現(xiàn)場離奇詭異遵湖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)晚吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門延旧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人槽地,你說我怎么就攤上這事迁沫。” “怎么了捌蚊?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵集畅,是天一觀的道長。 經(jīng)常有香客問我缅糟,道長挺智,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任窗宦,我火速辦了婚禮赦颇,結(jié)果婚禮上二鳄,老公的妹妹穿的比我還像新娘。我一直安慰自己媒怯,他們只是感情好订讼,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沪摄,像睡著了一般躯嫉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杨拐,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天祈餐,我揣著相機(jī)與錄音,去河邊找鬼哄陶。 笑死帆阳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屋吨。 我是一名探鬼主播蜒谤,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼至扰!你這毒婦竟也來了鳍徽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤敢课,失蹤者是張志新(化名)和其女友劉穎阶祭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體直秆,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡濒募,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了圾结。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑰剃。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖筝野,靈堂內(nèi)的尸體忽然破棺而出晌姚,到底是詐尸還是另有隱情,我是刑警寧澤歇竟,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布舀凛,位于F島的核電站,受9級特大地震影響途蒋,放射性物質(zhì)發(fā)生泄漏猛遍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懊烤。 院中可真熱鬧梯醒,春花似錦、人聲如沸腌紧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽壁肋。三九已至号胚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浸遗,已是汗流浹背猫胁。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跛锌,地道東北人弃秆。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像髓帽,于是被迫代替她去往敵國和親菠赚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 3,345評論 0 2
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 8,999評論 0 13
  • 選擇題部分 1.(),只有在發(fā)生短路事故時或者在負(fù)荷電流較大時,變流器中才會有足夠的二次電流作為繼電保護(hù)跳閘之用郑藏。...
    skystarwuwei閱讀 12,927評論 0 7
  • 2018-08-29 單選題 1衡查、下列關(guān)于繼承的描述錯誤的是(D) A.在Java中允許定義一個父類的引用...
    蝸牛滴追逐閱讀 2,778評論 0 0
  • 很多人都不太注意這一點(diǎn),手機(jī)放在桌子上都是隨意放在一邊必盖,但你知道嗎拌牲,這其中也是有學(xué)問的。手機(jī)要盡量屏幕朝下放置筑悴,這...
    簡duangduang閱讀 148評論 0 0