Skip to content

Commit

Permalink
sync with latest CP4 edits
Browse files Browse the repository at this point in the history
  • Loading branch information
U-NUSSTF\dcssh authored and U-NUSSTF\dcssh committed Jan 31, 2020
1 parent b68f0ac commit 49b5875
Show file tree
Hide file tree
Showing 11 changed files with 137 additions and 26 deletions.
3 changes: 2 additions & 1 deletion ch3/cs/itertools1.py
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
12 changes: 5 additions & 7 deletions ch3/cs/itertools2.py
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
4 changes: 1 addition & 3 deletions ch3/dp/UVa00674.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,7 @@ def ways(coin_type, value):
def main():
inp = SamInput()
for i in range(6):
memoTable = []
for j in range(7500):
memoTable.append(-1)
memoTable = [-1] * 40
memo.append(memoTable)
while True:
money = inp.read()
Expand Down
80 changes: 80 additions & 0 deletions ch3/dp/UVa10130.py
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()
20 changes: 11 additions & 9 deletions ch3/greedy/loowater_UVa11292.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,23 @@

#include <bits/stdc++.h>
using namespace std;


typedef vector<int> vi;

int main() {
int n, m;
while (scanf("%d %d", &n, &m), (n || m)) {
vector<int> head(n);
vector<int> height(m);
for (int d = 0; d < n; ++d) scanf("%d", &head[d]);
for (int k = 0; k < m; ++k) scanf("%d", &height[k]);
sort(head.begin(), head.end());
sort(height.begin(), height.end());
vi D(n);
vi H(m);
for (int d = 0; d < n; ++d) scanf("%d", &D[d]);
for (int k = 0; k < m; ++k) scanf("%d", &H[k]);
sort(D.begin(), D.end()); // sorting is an important
sort(H.begin(), H.end()); // 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) && (head[d] > height[k])) ++k; // find required knight k
while ((k < m) && (D[d] > H[k])) ++k; // find required knight k
if (k == m) break; // loowater is doomed :S
gold += height[k]; // pay this amount of gold
gold += H[k]; // pay this amount of gold
++d; ++k; // next dragon & knight
}
if (d == n) printf("%d\n", gold); // all dragons are chopped
Expand Down
32 changes: 32 additions & 0 deletions ch3/greedy/loowater_UVa11292.java
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.
12 changes: 6 additions & 6 deletions ch9/UVa11616.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import java.io.*;

class Main {
public static PrintWriter pr;
public static PrintWriter pw;

public static void AtoR(int A) {
// process from larger values to smaller values
Expand All @@ -19,11 +19,11 @@ public static void AtoR(int A) {
Integer key = (Integer) i.next();
String value = (String) cvt.get(key);
while (A >= key) {
pr.print(value);
pw.print(value);
A -= key;
}
}
pr.printf("\n");
pw.printf("\n");
}

public static void RtoA(String R) {
Expand All @@ -37,12 +37,12 @@ public static void RtoA(String R) {
value += RtoA.get(R.charAt(i+1)) - RtoA.get(R.charAt(i)); // by definition
i++; } // skip this char
else value += RtoA.get(R.charAt(i));
pr.printf("%d\n", value);
pw.printf("%d\n", value);
}

public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
pr = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));

while (true) {
String str = br.readLine();
Expand All @@ -51,6 +51,6 @@ public static void main(String[] args) throws Exception {
else RtoA(str); // Roman to Arabic Numerals
}

pr.close();
pw.close();
}
}

0 comments on commit 49b5875

Please sign in to comment.