原创 隨機數模擬拋硬幣實驗

在現實計算機上無法產生真正的隨機數,因此在隨機化算法中使用的隨機數都是一定程度上隨機的,即僞隨機數。線性同餘法是產生僞隨機數最常用的方法(這裏不介紹)。 下面用計算機產生大的僞隨機數來模擬拋硬幣試驗。假設拋10次硬幣,每次拋硬幣得到正面

原创 最大子段和問題的分治算法和動態規劃算法

如果將所給的序列a[1:n]分爲長度相等的兩段a[1:n/2]和a[n/2:n],分別求出這兩段的最大子段和,則a[1:n]的最大子段和有三種情形:(當所有整數均爲負數時定義其最大子段和爲0) 1)a[1:n]的最大子段和與a[1:n/2

原创 亂數配合面積求π

#include<iostream.h> #include<stdlib.h> #include<time.h> #define N 50000 int main(){ int i,sum=0; double x,y; srand

原创 八皇后 拉斯維加斯算法

拉斯維加斯算法的一個顯著特徵就是它所做的隨機性決策有可能導致算法找不到所需的解。因此常用一個bool型函數表示拉斯維加斯算法。找到解就返回true,否則返回false。 n後問題典型的有回溯法(n後問題這裏不多說),但是也是拉斯維加斯算法

原创 八枚銀幣算法

  說明現在有八枚銀幣,已知其中一枚是假幣,其重量不用於真幣,  但不知道是較輕還是較重,如何使用天平以最少的比較次數,決定  出哪枚是假幣,並得知假幣是較輕還是較重。 #include <stdio.h> #include <stdl

原创 普里姆(Prim)算法和克魯斯卡爾(Kruskal)算法

        圖是一種基礎又重要的數據結構,圖的生成樹是圖的一個極小連通子圖。最小生成樹是無向連通網的所有生成樹中邊的權值之和最小的一棵生成樹。求圖的最小生成樹可以牽引出很多經典的題目,例如在N個城市之間建立通訊網絡,問怎樣最省經費(不

原创 1002. 寫出這個數 (20)

1002. 寫出這個數 (20) 時間限制 400 ms 內存限制 65536 kB 代碼長度限制 8000 B 判題程序 Standard 作者 CHEN, Yue 讀入一個自然數n,計算其

原创 稀疏矩陣

稀疏矩陣 如果在矩陣中,多數的元素並沒有資料,稱此矩陣爲稀疏矩陣,由於矩陣在程序中常用二維矩陣表示, 二維陣列的大小與使用的記憶體空間成正比,如果多數的元素沒有資料,則會造成記憶空間的浪費。 爲此,必須設計稀疏矩陣的陣列存儲方式,利用較

原创 串匹配 KMP

1. 前言   字符串匹配是一個經典算法問題,展開來講各類問題多達幾十種,有名稱的算法也不下三十種,所以需要深入學習的東西有很多。這次我們來探討一個最簡單的問題,假設現在隨機輸入一個長度爲m的主串T,另外輸入一個長度爲n(n≤m)的字

原创 吝嗇的國度(超內存,未完成)

       首先!這是個失敗的小程序,程序沒錯,可以達到預期目的。但是,時間,內存都超出了要求。懶,以後有時間我會改進的。 吝嗇的國度 時間限制:1000 ms  |  內存限制:65535 KB 難度:3 描述在一個吝嗇

原创 佈線問題 隊列式分支算法

印刷電路板將佈線區域劃分成n*m個方格陣列。精確的電路佈線問題要求確定鏈接方格a到方格b的最短佈線方案。在佈線時,電路只能沿直線或者直角佈線。爲了避免線路相交,已布了線的方格做了封鎖標記(紅色方格),其他線路不允許穿過被封鎖的方格。

原创 1008. 數組元素循環右移問題 (20)

1008. 數組元素循環右移問題 (20) 時間限制 400 ms 內存限制 65536 kB 代碼長度限制 8000 B 判題程序 Standard 一個數組A中存有N(N>0)個整數,在不允

原创 活動安排(貪心算法)

貪心算法總是做出在當前看來是最好的選擇。但貪心算法並不從整體最優加以考慮,它所做出的選擇只是在某種意義上的局部最優選擇。但其最終結果能達到預期目的,或者是最優解的近似解。 活動安排是貪心算法的一個很好的例子:設有n個活動的集合E={1,2

原创 動態規劃求最長公共子序列LCS

        現在有兩串字符串str1和str2,要求它們的最長公共子序列。首先要說的是,子序列的各字符可以是在原來的母串中分開的,但是前後是有序的,而子串的各字符則必須是在母串中連續挨着的。子串和子序列不要搞混。         要

原创 遞歸排列(低效)

#include<iostream> using namespace std; void Swap(char &a,char &b) { char temp; temp=a; a=b; b=temp; } void Per