紙牌遊戲 動態規劃入門經典

2021-08-28 00:14:41 字數 1287 閱讀 9779

time limit: 1 sec  memory limit: 128 mb

submit: 20  solved: 10

[submit][status][web board]

給你n張紙牌,一字排開,紙牌有正反面,正面寫有0,反面寫有1。開始的紙牌可能是一種亂的狀態(有0有1)現在你需要整理這些紙牌。但麻煩的是,每當你翻一張紙牌時,他左右兩張紙牌也必須跟著翻動,現在給你乙個亂的狀態,問你能否把他們整理好,使得每張紙牌都正面朝上,如果可以,最少需要多少次操作。

有多組資料,每組資料輸入一行01符號串(長度20以內),0表示正面朝上,1表示反面朝上。

對於每組資料,如果可以翻稱全都是正面,輸出最少需要翻動的次數,否則輸出no。

01

011

no

1

這道題就看我是翻第一張還是不翻第一張,因為第一張決定後面的紙牌順序,所以分情況討論即可

/*

看翻不翻第一張,第一張由自己或者第二張決定

如果前一張為0就不變為1就變

*/# include # include # include using namespace std;

int main(int argc, char *argv)

else

}else

else

}s1++;

for(int i = 1; i < str1.size(); i++)

else

if(i + 1 < str1.size())

else

}s1++;

}} //從第二個開始

for(int i = 1; i < str2.size(); i++)

else

if(i + 1 < str2.size())

else

}s2++;

}} // cout << "s1 = "

// cout << flag1 << " " << flag2 << endl;

int pos = str1.find('1');

if(pos != string::npos)

pos = str2.find('1');

if(pos != string::npos)

// cout << flag1 << " " << flag2 << endl;

if(flag1)

else

}else

else

}}}

動態規劃入門

1 用 dp 做的題大多數返回值是int boolean,求max min,不能打亂原來輸入順序。2 動態規劃有兩個重要定義,乙個叫 optimal substructure 另乙個叫 overlap subproblem 各種排序 tree 類問題中,都會用到 divide conquer 的思想...

動態規劃入門

大家可以看看這篇文章dp,哪個更容易理解就看哪個!一 動態規劃的定義 動態規劃程式設計是一種針對於解決最優化問題的一種途徑 一種方法,而不是一種特殊演算法,也就是說它沒有固定的模板。在動態規劃中,每走一步都要看看能不能最優,而且動態規劃最擅長的就是多階段問題!二 動態規劃的基本概和基本模型構成 1....

動態規劃入門

學動態規劃自然要從數字三角形開始起步,那麼我們就先從數字三角形開始。數字三角形題目 有乙個由非負整數組成的三角形,第一行只有乙個數,除了最下行之外的每個數的左下方和右下方各有乙個數,如下圖所示 3 24 10 1 4 3 2 20 從第一行的數開始,每次可以往下或往右下走一格,直到走到最下行,把沿途...