#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX_N = 101;
const int MAX_K = 10001;
const int IMPOSSIBLE = 1000000000;
int N, K, cost[MAX_N], dp[MAX_N][MAX_K];
int coin(int n, int k){
if(n == N) return (k==0 ? 0 : IMPOSSIBLE); // base case
if(dp[n][k] != -1) return dp[n][k]; // 이미 계산됨
int result = coin(n+1, k);
if(k >= cost[n]) result = min(result, coin(n, k-cost[n]) + 1);
dp[n][k] = result; // dp 배열 값 갱신
return result;
}
int main(){
scanf("%d %d", &N, &K);
for(int i=0; i<N; i++)
scanf("%d", cost+i);
// dp 배열 초기화
for(int i=0; i<=N; i++)
for(int j=0; j<=K; j++)
dp[i][j] = -1;
// dp로 문제 품
int result = coin(0, K);
if(result == IMPOSSIBLE) puts("-1");
else printf("%d\n", result);
}
이거랑
def coin(n, k):
if n == N:
if k == 0:
return 0
else:
return impossible
if dp[n][k] != -1:
return dp[n][k]
tmp_result = coin(n+1, k)
if k >= cost[n]:
tmp_result = min(tmp_result, coin(n, k-cost[n])+1)
dp[n][k] = tmp_result
return tmp_result
if __name__ == "__main__":
N, K = map(int, sys.stdin.readline().split())
cost = []
for i in range(N):
cost.append(int(sys.stdin.readline()))
sorted(cost)
dp = [[-1]*10001]*101
impossible = 1000000000
result = coin(0, K)
if result == impossible:
print("-1\n")
else:
print(result)
이 코드 두개가 테스트 결과 위에거는 맞고 밑에거는 틀렸대
참고로 백준 동전2(2294) 푸는 코드인데
대체 어디가 달라서 두개가 다른 코드라고 나오는거임????
밑에사진배열이 좀 좆같이되어잇는데 위에꺼랑 돌리는건 다 같음
모르면 디버깅하세요
c++을 돌리줄 몰라요 ㅠㅠㅠ
배워
한번만 살려주시면안되까여
바보노?
일단 상수값선언이 안되있네