forked from stevenhalim/cpbook-code
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
U-NUSSTF\dcssh
authored and
U-NUSSTF\dcssh
committed
Jan 31, 2020
1 parent
b68f0ac
commit 49b5875
Showing
11 changed files
with
137 additions
and
26 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
import itertools | ||
print(list(itertools.permutations(range(4)))) | ||
p = list(itertools.permutations(range(7))) # iterate through p | ||
print(len(p)) # should be 7! = 5040 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,6 @@ | ||
import itertools | ||
items = [1, 2, 3, 4] | ||
N = len(items) | ||
combi = [] | ||
for i in range(1, N+1): | ||
combi = combi+list(itertools.combinations(items, i)) | ||
for stuffs in combi: | ||
print(stuffs) | ||
N = 7 | ||
items = list(range(1, N+1)) | ||
c = [list(itertools.combinations(items, i)) for i in range(1, N+1)] | ||
c = list(itertools.chain(*c)) # combine lists | ||
print(len(c)) # should be 2^7-1 = 127 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
import sys | ||
|
||
# input | ||
class SamInput(object): | ||
def __init__(self): | ||
self.inp = [] | ||
for i in sys.stdin: | ||
i = i.replace("\n", "") | ||
j = list(i.split()) | ||
self.inp.append(j) | ||
|
||
def readln(self): | ||
if len(self.inp) == 0: | ||
return False | ||
else: | ||
return str.join(" ", self.inp.pop(0)) | ||
|
||
def read(self): | ||
if len(self.inp) == 0: | ||
return False | ||
while len(self.inp[0]) == 0: | ||
self.inp.pop(0) | ||
if len(self.inp) == 0: | ||
return False | ||
return self.inp[0].pop(0) | ||
|
||
|
||
# How to use: | ||
# 1) copy line 1-25 | ||
# 2) declare variable as SamInput() | ||
# Ex: test = SamInput() | ||
# 3) to read one line, use readln | ||
# Ex: newline = test.readln() | ||
# 4) to read one element(splitted by empty line / whitespace), use read | ||
# Ex: newline = test.read() | ||
# 5) remember, all this function will return a string, need to convert to int | ||
# 6) if there is no more element/line, it will return False (boolean object) | ||
|
||
def value(id, w): | ||
global N, W, V, memo | ||
if id == N or w == 0: | ||
return 0 | ||
if memo[id][w] != -1: | ||
return memo[id][w] | ||
if W[id] > w: | ||
memo[id][w] = value(id+1, w) | ||
return memo[id][w] | ||
memo[id][w] = max([value(id+1, w), V[id] + value(id+1, w-W[id])]) | ||
return memo[id][w] | ||
|
||
def main(): | ||
inp = SamInput() | ||
T = int(inp.read()) | ||
for _ in range(T): | ||
global N, W, V, memo | ||
N = int(inp.read()) | ||
# print("outside, N = ", N) | ||
memo = [] | ||
for i in range(N+1): | ||
memoTable = [] | ||
for j in range(40): | ||
memoTable.append(-1) | ||
memo.append(memoTable) | ||
|
||
V = [0] * N | ||
W = [0] * N | ||
for i in range(N): | ||
V[i] = int(inp.read()) | ||
W[i] = int(inp.read()) | ||
|
||
ans = 0 | ||
G = int(inp.read()) | ||
for _ in range(G): | ||
MW = int(inp.read()) | ||
# print("MW = ", MW) | ||
ans += value(0, MW) | ||
print(ans) | ||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
// The Dragon of Loowater | ||
|
||
import java.util.*; | ||
import java.io.*; | ||
|
||
class loowater_UVa11292 { | ||
public static void main(String[] args) throws Exception { | ||
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); | ||
PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); | ||
while (true) { | ||
String[] token = br.readLine().split(" "); | ||
int n = Integer.parseInt(token[0]), m = Integer.parseInt(token[1]); | ||
if ((n == 0) && (m == 0)) break; | ||
ArrayList<Integer> D = new ArrayList<>(n); | ||
ArrayList<Integer> H = new ArrayList<>(m); | ||
for (int d = 0; d < n; ++d) D.add(Integer.parseInt(br.readLine())); | ||
for (int k = 0; k < m; ++k) H.add(Integer.parseInt(br.readLine())); | ||
Collections.sort(D); // sorting is an important | ||
Collections.sort(H); // pre-processing step | ||
int gold = 0, d = 0, k = 0; // both arrays are sorted | ||
while ((d < n) && (k < m)) { // while not done yet | ||
while ((k < m) && (D.get(d) > H.get(k))) ++k; // find required knight k | ||
if (k == m) break; // loowater is doomed :S | ||
gold += H.get(k); // pay this amount of gold | ||
++d; ++k; // next dragon & knight | ||
} | ||
if (d == n) pw.printf("%d\n", gold); // all dragons are chopped | ||
else pw.println("Loowater is doomed!"); | ||
} | ||
pw.close(); | ||
} | ||
} |
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters