- BFS
- 7.1. 최대점수 구하기 (DFS)
- 7.2.
- 7.3.
- 7.4.
- 7.5.
- 7.6.
- 7.7.
- 7.8.
- 7.9.
- 7.10.
- 7.11.
- 7.12.
- 7.13.
- 7.14.
- 7.15.
- 7.16.
- 7.17.
Python Algorithm Practice
BFS
input: 6
3
5
4
7
2
1
output: 3 2 5 1 4 7
(data value of each node in the tree’s level-order traversal)
class Node:
def __init__(self,data):
self.right=self.left=None
self.data = data
class Solution:
def insert(self,root,data):
if root==None:
return Node(data)
else:
if data<=root.data:
cur=self.insert(root.left,data)
root.left=cur
else:
cur=self.insert(root.right,data)
root.right=cur
return root
def levelOrder(self,root):
q = [ root ]
for current in q:
if current:
print(current.data, end=' ')
q.append(current.left)
q.append(current.right)
T=int(input())
myTree=Solution()
root=None
for i in range(T):
data=int(input())
root=myTree.insert(root,data)
myTree.levelOrder(root)
7.1. 최대점수 구하기 (DFS)
이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다.
각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩니다.
제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.)
def DFS(L, sum, time):
global res
if time>m:
return
if L==n:
if sum>res:
res=sum
else:
DFS(L+1, sum+pv[L], time+pt[L])
DFS(L+1, sum, time)
if __name__=="__main__":
n, m=map(int, input().split())
pv=list()
pt=list()
for i in range(n):
a, b=map(int, input().split())
pv.append(a)
pt.append(b)
res=-2147000000
DFS(0, 0, 0)
print(res)