哈夫曼樹
2n皇后問題
fbi樹
矩陣乘法
源位址
輸入
兩行等長的字串,分別表示初始狀態和要達到的目標狀態。每行的長度<1000輸出
乙個整數,表示最小操作步數樣例輸入
樣例輸出
**試想,每次翻就會翻好乙個,其實直接翻就是最優的翻法
#include
"iostream"
#include
"cstring"
#include
"algorithm"
using
namespace std;
intmain()
elseif(
!(str1[i +1]
^'o'))
else
sum++;}
} cout << sum;
return0;
}
源位址
huffman樹在編碼中有著廣泛的應用。在這裡,我們只關心huffman樹的構造過程。
給出一列數=,用這列數構造huffman樹的過程如下:
找到中最小的兩個數,設為pa和pb,將pa和pb從中刪除掉,然後將它們的和加入到中。這個過程的費用記為pa+ pb。
重複步驟1,直到中只剩下乙個數。
在上面的操作過程中,把所有的費用相加,就得到了構造huffman樹的總費用。
本題任務:對於給定的乙個數列,現在請你求出用該數列構造huffman樹的總費用。
例如,對於數列=,huffman樹的構造過程如下:
找到中最小的兩個數,分別是2和3,從中刪除它們並將和5加入,得到,費用為5。
找到中最小的兩個數,分別是5和5,從中刪除它們並將和10加入,得到,費用為10。
找到中最小的兩個數,分別是8和9,從中刪除它們並將和17加入,得到,費用為17。
找到中最小的兩個數,分別是10和17,從中刪除它們並將和27加入,得到,費用為27。
現在,數列中只剩下乙個數27,構造過程結束,總費用為5+10+17+27=59。
輸入
輸入的第一行包含乙個正整數n(n<=100)。輸出接下來是n個正整數,表示p0, p1, …, pn-1,每個數不超過1000。
輸出用這些數構造huffman樹的總費用。樣例輸入
5樣例輸出**5 3 8 2 9
#include
"iostream"
#include
"string"
#include
"algorithm"
using
namespace std;
intmain()
sort
(a, a + n)
;for
(int i =
1; i < n; i++
) cout << sum;
return0;
}
源位址
給定乙個n*n的棋盤,棋盤中有一些位置不能放皇后。現在要向棋盤中放入n個黑皇后和n個白皇后,使任意的兩個黑皇后都不在同一行、同一列或同一條對角線上,任意的兩個白皇后都不在同一行、同一列或同一條對角線上。問總共有多少種放法?n小於等於8。輸入
輸入的第一行為乙個整數n,表示棋盤的大小。輸出接下來n行,每行n個0或1的整數,如果乙個整數為1,表示對應的位置可以放皇后,如果乙個整數為0,表示對應的位置不可以放皇后。
輸出乙個整數,表示總共有多少種放法。樣例輸入
4樣例輸出**1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
#include
"iostream"
#include
"cstring"
#include
"math.h"
using
namespace std;
class
game}}
int placeblackqueen (
int k)}if
(k == n)
for(
int i =
0; i < n; i++)}
}int placewhitequeen (
int k)}if
(k == n)
for(
int i =
0; i < n; i++)}
}};int
main()
noip全國聯賽普及組-2023年noip全國聯賽普及組
我們可以把由「0」和「1」組成的字串分為三類:全「0」串稱為b串,全「1」串稱為i串,既含「0」又含「1」的串則稱為f串。fbi樹是一種二叉樹(如下圖),它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的「01」串s可以構造出一棵fbi樹t,遞迴的構造方法如下:
t的根結點為r,其型別與串s的型別相同;
若串s的長度大於1,將串s從中間分開,分為等長的左右子串s1和s2;由左子串s1構造r的左子樹t1,由右子串s2構造r的右子樹t2。
現在給定乙個長度為2n的「01」串,請用上述構造方法構造出一棵fbi樹,並輸出它的後序遍歷序列。
輸入
每組輸入資料的第一行是乙個整數n(0<=n<=10),第二行是乙個長度為2n的「01」串。輸出資料規模:
對於40%的資料,n<=2;
對於全部的資料,n<=10。
每組輸出包括一行,這一行只包含乙個字串,即fbi樹的後序遍歷序列。樣例輸入
3樣例輸出10001011
ibfbbbfibfiiiff**
#include
"iostream"
#include
"cstring"
#include
"algorithm"
using
namespace std;
struct node
;class
fbi_tree
else}if
(flagzero &&
!flagone)if(
!flagzero && flagone)
if(flagzero && flagone)
if(begin < end)
else
}void
postorder
(node *tree)}}
;int
main()
源位址
有n個矩陣,大小分別為a0a1, a1a2, a2a3, …, a[n-1]a[n],現要將它們依次相乘,只能使用結合率,求最少需要多少次運算。輸入兩個大小分別為pq和qr的矩陣相乘時的運算次數計為pqr。
輸入的第一行包含乙個整數n,表示矩陣的個數。輸出第二行包含n+1個數,表示給定的矩陣。
輸出乙個整數,表示最少的運算次數。樣例輸入
3樣例輸出**1 10 5 20
#include
"iostream"
#include
"algorithm"
using
namespace std;
long
longdp(
long
long
*a,int n)
m[i]
[i]=0;
}// 連乘的矩陣位置差
for(
int len =
1; len < n; len++)}
}}return m[0]
[n -1]
;}intmain()
cout <<
dp(a, n)
;return0;
}
藍橋杯刷題記錄
problem f.wiki with string input file standard input time limit 1 second output file standard output memory limit 256 megabytes 現在有乙個字串s,s中只包含數字字元0 9,...
藍橋杯 刷題記錄(2019 11 16)
1115 dna 源位址蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。輸入本題有多組資料,每組資料由乙個正整數n組成。n不大於100 輸出對於每一組資料,輸出乙個n行的蛇形矩陣。兩組輸出之間不要額外的空行。矩陣三角中同一行的數字用乙個空格分開。行尾不要多餘的空格。樣例輸入樣例輸出1 3 6...
OI刷題記錄
2014 4 18 poj3264 bzoj1699 balanced lineup rmq 2014 4 19 bzoj1012 jsoi2008 最大數maxnumber noi2004 鬱悶的出納員 bzoj3224 tyvj 1728 普通平衡樹 2014 4 20 bzoj1862 105...