Problem
依序參加派對,每一個派對要求的服裝可能有所不同,可以衣服一件套一件去參加下一場派對,一旦脫下來服裝將不會穿第二次,請問至少要準備幾件才能參與所有派對。
Sample Input
|
|
Sample Output
|
|
Solution
dp[l][r]
表示參與區間 [l, r]
從 l 開始的最少服裝數。
假設一開始已經穿著 l-th 的服裝,則將可以在參加完後脫掉,或者是到同一個另外一個場所之後考慮是否要脫掉。
|
|
依序參加派對,每一個派對要求的服裝可能有所不同,可以衣服一件套一件去參加下一場派對,一旦脫下來服裝將不會穿第二次,請問至少要準備幾件才能參與所有派對。
|
|
|
|
dp[l][r]
表示參與區間 [l, r]
從 l 開始的最少服裝數。
假設一開始已經穿著 l-th 的服裝,則將可以在參加完後脫掉,或者是到同一個另外一個場所之後考慮是否要脫掉。
|
|
有n个糖果,每个糖果有p,j两个值,现在有两个人Petra和Jan,Prtra的取糖果方式是优先去p值大的j值小的;Jan取糖果的方式是尽量让自己开心值(取出糖果的j值和)大的情况下让Petra的开心值(取出糖果的p值和)也大,给出先选糖果的人,问说最后两人的开心值分别为多少。
這裡可以明白有兩種策略
|
|
|
|
Petra 使用貪心,將糖果數值按照 P 降排序,來作為 dp 時候 Petra 轉移用的順序,只要確保 Petra 會根據這個順序從大挑到小。
並且確保前 i 個糖果時,Jan 不會拿超過 i/2 個糖果 (否則表示交替順序不符合規則),Jan 可以選擇先讓 Petra 分配到大的 P,而自己先去取大的 J。
dp[i][j]
表示前 i 個糖果,Jan 分配到 j 個的最佳策略 (J, P)。
|
|
原本是一張 DAG,增加一條有向邊會使得存有一個環,而這個環將會通過所有的點一次。
現在給予加完後的結果,是否存在一條有向邊,使得原本的 DAG 變成符合上述條件的圖。
|
|
|
|
由於只能通過所有點一次的環,對於 DAG 而言,替除掉應該加入的邊會發現到拓樸排序只能是唯一的長鏈狀。
因此窮舉拔掉所有可能的邊,並且檢查是否能夠符合長鏈狀的拓樸順序。
|
|
給一個 N 個城市的地圖,每一條路徑上會有成本和獲益,希望找到一條送貨的環道,是否存在一個環道使得獲益是成本的 P 倍。
|
|
|
|
最小比例環的應用,事實上可以把題目化簡為負環檢查,將每一條邊的權重定義為 expense * p - income
,只要負環存在則存有一條環道的 獲益/成本 > P
點數很少,直接用 floyd 在 O(n^3)
找解。
|
|
The problem of finding the next term of a given sequence of numbers is usually proposed in QI tests. We want to generate the N terms of a sequence from a given codification of the sequence.
Let S = (Si)i $\scriptstyle \in$$\scriptstyle \mathbb {N}$ denote a sequence of real numbers whose i -order term is Si . We codify a constant sequence with the following operator:
S = [ n] meaning that Si = n $\displaystyle \forall$i$\displaystyle \in$$\displaystyle \mathbb {N}$,
where n$\in$$\mathbb {Z}$ . We also define the following operators on a given sequence of numbers S = (Si)i $\scriptstyle \in$$\scriptstyle \mathbb {N}$ :
V = [ m + S ] meaning that
$Vi = \displaystyle \cases{m & , <span>$i=1$</span><!-- Has MathJax --> \cr V<em>{i-1}+ S</em>{i-1} & , <span>$i > 1$</span><!-- Has MathJax --> \cr};<br>$
V = [ m * S ] meaning that
$Vi = \displaystyle \cases{m \ast S_{1} & , <span>$i=1$</span><!-- Has MathJax --> \cr V_{i-1} \ast S_i & , <span>$i > 1$</span><!-- Has MathJax --> \cr};<br>$
where m$\in$$\mathbb {N}$ . For example we have the following codifications:
|
|
Given a codification, the problem is to write the first N terms of the sequence.
The input file contains several test cases. For each of them, the program input is a single line containing the codification, without any space, followed by an integer N(2$\le$N$\le$50) .
For each test case, the program output is a single line containing the list of first N terms of the sequence.
|
|
|
|
遞迴建造
|
|
For example, 22203014 is a base-4 super divisible number because 24 is divisible by 1, 224 is divisible by 2, 2224 is divisible by 3, 22204 is divisible by 4, 222034 is divisible by 5, 2220304 is divisible by 6, and 22203014 is divisible by 7.
Find the largest super divisible number of a given base which uses only digits from a given list of digits.
基底為 B 的數字 N 前綴長度 i 必需被 i 整除,找到一個最大符合條件的數字。同時會限用哪幾種 digit。
|
|
|
|
感謝天祥大大的指導,一度以為非常多解,因此逼不得以要用 dp 運行,但是仔細想想狀態太大,也無法計算。
根據窮舉的方式可以發現到,每一次窮舉時,假使前一次 mod i = X
,則為了要使得 X + ? = 0 (mod i)
則 ?
的地方能填入的數字個數相當於 2 * i <= B
的解,因此答案的數量是相當少的,也就是說最多為 (B/i)! 種可能,撇開不可運行的分枝,其實符合這個條件的數字相當少。
|
|
簡化版本的 UVA 10206 - Stars,這一題只求三角形之間的情況,並且只需要考慮相同大小、可能會任意地旋轉或者是翻轉 (鏡射)。
找到一個解輸出即可。
|
|
|
|
窮舉一條三角形上的邊當作 AB 邊,利用向量旋轉找到 C 點位置,查閱 C 點位置是否有存在於輸入的點集合中。
|
|
化合物只會有有三種 X, Y, Z,並且兩兩化合最多也只會是這三種。每次化合只能拿相鄰的進行化合,求最後能化合出的最大化合物為何 Z > Y > X
?
|
|
|
|
使用矩陣鍊乘積的 dp 方法,將可以在 O(n^3)
時間內完成,但是由於測資量龐大,單純的 O(n^3)
很容易 TLE,利用剪枝的方式,若已經完成所有可能情況的化合則停止。
|
|
一個神祕的堆疊方式,假如燒杯大小大於要放入的燒杯,在不超過其原本的燒杯高度的情況下,則可以將其放入內部,放入內部後,可能掉入底層的燒杯中。
根據這樣的方式模擬最後堆疊的最大高度。
|
|
|
|
半夜爬起來寫的,總覺得檢查事件挺麻煩的事情,因此採用遞迴的方式建造,在退回的情況下查閱是否要疊在上方。
inner 表示內部底層的燒杯、outer 表示上方的燒杯,footer 表示下方的燒杯。
|
|
將一個數字對應一個字母,現在已經有一些字典的單字,先將 seed 字串對應到第一組加密數字。接著找到一種對應方式,使得每一組加密數字都可以對應到字典單字中。
|
|
|
|
題目看起來挺嚇人,直接窮舉即可,保證只有一解。
|
|