2.3k2 分鐘

# 題目: UVa 11420 - Chest of Drawers # 題目說明 題目中的櫃子由數個抽屜堆疊而成,但是這種櫃子有安全上的疑慮 若你將一個抽屜完全抽出,那你能拿到下一層抽屜的東西 當前有L個抽屜,有S格是完全安全的,求總共有幾種排列法? 例如: L = 6, S = 4 則有6種可能 U L L L L L L U L L L L L L U L L L L L L U L L L L L L U L L L L L U U (L為上鎖的,U為未上鎖的,粗體為不安全) INPUT: 每筆測資輸入兩個整數L、S,前者代表總抽屜數,後者代表安全的抽屜數 當
1.4k1 分鐘

# 題目: UVa 10912 - Simple Minded Hashing # 題目說明 題目定義一個hashing函數,它是由小寫英文字母的嚴格遞增字串組成,函數值為英文字母的編號數之合 求長度為L,函數值為S時的可能組數 例如: L = 3, S = 10 則有4種可能: abg, acf, ade, bce INPUT: 每筆測資輸入兩個整數L、S,前者代表字串長度,後者代表函數值 OUTPUT: 輸出當字串長度為L,函數值為S時的組數 # 解題方法 題目的範圍過於浮誇 由於限制小寫英文字母,所以a ~ z有26個,而函數值為1 + 2 + ... + 2
2k2 分鐘

# 題目: UVa 10003 - Cutting Sticks # 題目說明 你需要將一條木頭特定的點切割,每次cost木頭當前的長度,求最小的切割cost 例如: 長100公分的木頭,你需要在25、50、75的地方切割 1. 若你按25、50、75的順序切割 第一次cost 100,木頭剩下75公分 (25 ~ 100) 第二次cost 75,木頭剩下50公分 (50 ~ 100) 第二次cost 50,木頭剩下25公分 (75 ~ 100) 這樣的總cost = 225 2. 若你按50、25、75或50、72、25的順序切割 總cost會是100 + 50 + 50 
9491 分鐘

# 題目: UVa 10943 - How do you add # 題目說明 你需要解決一個計算的問題 給一個最大數N,由小於N的數中取K個數加至N,求有幾種加法? INPUT: 每筆測資輸入兩個整數N、K 當N與K為0時結束程式 OUTPUT: 輸出最大數N時,每次取K個數有幾種加法? (dp[N][K]) # 解題方法 同樣將所有情況的答案算出儲存,再根據N, K的值輸出答案 當K = 1時,只有一種可能,所以將dp[i][1]設為1 利用2層for迴圈動態規劃,對於dp[i][j]來說,為dp[i - k][j - 1]的總和 (k為0 ~ i) dp[i][j]記得要
2k2 分鐘

# 題目: UVa 10721 - Bar Codes # 題目說明 bar-code是由黑色及白色線條組成的,相鄰所有同顏色的線條視為一個區域 有一個算法BC(N, K, M),代表總共有N條線,K個區域,每個區域最多有M條線 給一組(N, K, M),求此情況的排列數 INPUT: 每筆測資輸入3個整數N、K、M OUTPUT: 輸出BC(N, K, M) # 解題方法 先將所有情況的答案算出儲存,再根據N, K, M的值輸出答案 0條線、0個區域必定只有一種可能,將所有bc[0][0][i]設為1 利用3層for迴圈動態規劃,對於bc[i][j][k]來說,為bc[i - x][j
1.5k1 分鐘

# 題目: UVa 10337 - Flight Planner # 題目說明 你需要為一架飛機規劃最省油的路線 (從起點(0, 0)到終點(0, X)) 飛機有3種飛行方式 上升,會耗60的油 平飛,會耗30的油 下降,會耗20的油 飛行過程中會碰到風阻,負數為逆風,正數為順風 INPUT: 輸入一個N,代表有N筆測資 每筆測資第一行輸入一個整數X,代表飛機飛行的距離 (每100為一單位) 接著輸入10 * X個整數,代表每個位置的風阻 OUTPUT: 輸出最少的耗油量 # 解題方法 先儲存資料,建立wind風阻的表 將起點dp[0][0]設為0 從起點開始對10 * X表中每一個位
1k1 分鐘

# 題目: UVa 10189 - Minesweeper # 題目說明 給你n * m的矩形,並告訴你地雷的位置(*),求完成後踩地雷 INPUT: 每筆測資輸入兩個整數n與m,代表範圍 接下來輸入n * m個字元 OUTPUT: 輸出完成後的踩地雷圖 # 解題方法 一個一個字元讀取,當遇到*時,將其位置-10,以他為中心的九宮格全部+1 最後為負數則輸出*,其餘直接輸出 # 參考程式碼 #include <iostream> #include <memory.h> using namespace std; int main() { ios
8021 分鐘

# 題目: UVa 11498 - Division of Nlogonia # 題目說明 給你一個分割點的座標,求另一點在這個點的何處 INPUT: 每筆測資第一行輸入一個整數k,代表要輸入幾個點 輸入兩個整數(n, m),代表分割點的座標 接下來k行,每行輸入一個點(x, y) OUTPUT: 輸出點(x, y)位於分割點(n, m)的位置 在線上則輸出divisa 在東北輸出NE 在西北輸出NO 在東南輸出SE 在西南輸出SO # 解題方法 直接讀取資料進行if判斷即可 # 參考程式碼 #include <iostream> using namespace st
2.2k2 分鐘

# 題目: UVa 165 - Stamps # 題目說明 有k種面額郵票,每張明信片上最多能貼h張郵票 n(h, k)代表從k種面額中選擇至多h張郵票,使得可以組成面額為1 2 3 4 ... n的連續整數明信片 求n的最大值,及是哪k種面額的郵票 例如: h = 3及k = 2 則面額1與3可以組成連續最大7種面額的明信片 ( 1、1+1、3、3+1、3+1+1、3+3、3+3+1 ) 當面額為1與2或1與4時,只能組出最大6種 不論h與k是多少,一定包刮面額為1的郵票,不然就無法組成面額為1的明信片 INPUT: 每筆測資輸入兩個整數h與k 當h與k為0時,結束
1.7k2 分鐘

# 題目: UVa 1746 - String Theory # 題目說明 巢狀引文不只適合寫文章,也適合寫程式,以下是說明: 1層的引文 (1-quotation) 定義為一個字串的頭尾都有一個' 例如: 'this is a string' k層的引文 (k-quotation)定義為頭尾都有k個',而裡面有(k - 1)層的引文 例如: ''All 'work' and no 'play'''就是一個2層的引文 INPUT: 每筆測茲有兩行輸入 第一行為一個整數N,代表接下來有N個整數 第二