アルゴリズムコンテスト入門教程1

2393 ワード

数ヶ月前にプロに転向しましたが、アルゴリズムのレベルはまだそんなに強くないので、毎週できるだけアルゴリズムの内容を勉強します.
多くの話をしないで、始めましょう.
アルゴリズム入門学習では、このいくつかの問題が最も一般的である:
Dynamic Prograamming(ダイナミック企画)Gredy(欲張り)  Complettee Search(貧しさ)Floood Fill(シード充填)Shotest Path(最短パス)Recursive Search Techniques(トレース)MinimSpanning Tree(最小生成ツリー)Knapspack(バックパック)  Computtionl Geometry(幾何学を計算する)Network Flow(ネットワークフロー)Eulerian Path(Eulerian Path)Two-Dimensional Covex Hull(二次元凸包)BigNums(大数)Heuristic Search(発見的検索)Ad Hoblems問題.
一つのハロルドから開始:
OJの複数グループ入力:
タイトル1:2つの数a bを入力して、a+bの和を出力します.複数のデータを入力して、ファイルの最後まで処理します.
5  8       13
6  9       15
9  3       12
1  2        3
Cで書くと
#include
int main()
{
    int a, b;
    while(scanf("%d %d", &a, &b) != EOF)
    {
           printf("%d
", a + b); } return 0; }
C++で書くと
#include
using namespace std;
int main()
{
    int a, b;
    while(cin>>a>>b)
    {
           cout<
私達はできるだけcを混合しないで、c++の入出力の方式、データの規模はわりに大きくて、scanfを使うことを推薦します.
//前話はここまで.
 
私たちはクイズゲームについて話します.テーマは以下の通りです.
 例えば、明さんは心の中で0-1000の間の数字を考えていると言っています.この数字は先生に教えて、他の人に質問させます.質問する人は何でも聞いてもいいですが、明さんはYES/NOで答えます.何回で推測できますか?
まず思いつきやすいのは暴力列挙で、その次に別の策略があります.例えば、あなたが答えたのは、他の人が推測する数字は低くなりましたか?それとも高くなりましたか?
それからだんだん二点の推計策で推測の過程を簡略化することができます.この方法は決定樹ですよね?
 
その後、再帰策を見ます.
cを勉強したことがある人はすべて漢諾塔の問題を知っています.はっきり言っても再帰で実現されたのです.ただ直観的ではありません.これは二ヶ月前にBITの授業を補った後に出てきたものです.書類の頭は書かなくなりました.思想はやはり簡単です.核心解決方法はトランジストバーの助けを借りて、n-1皿を完成して一番後ろの棒を借りて中間の棒に移動して、そして最後の一番大きな皿を直接最後の棒に移して、第二の棒の中を第一の棒で第三の棒に移します.
    void move(char getone, char putone)
	{
	printf("%c--->%c
", getone, putone); // getone , putone } void hanoi(int n, char one, char two, char three) // n one , two , three { if (n == 1) move(one, three); else { hanoi(n - 1, one, three, two); move(one, three); hanoi(n - 1, two, one, three); } } int main(void) { // int m; printf("Input the number of disks:"); scanf("%d", &m); printf("The steps to moving the %d disks are as follows:
", m); hanoi(m, 'A', 'B', 'C'); system("pause"); return 0; }
それからもう一つのアルゴリズムが並列計算です.ここでは料理を比較しますから、言わないでください.
 
次の水文は再帰式の解法を学びに来ました.単独で開かれます.本編は導入としてここまでです.