https://www.acmicpc.net/problem/2293
메모리 : 1116 KB
시간 : 0ms
#include <stdio.h>
int main(){
int n, k;
int arr[109], dp[20009];
scanf("%d %d", &n, &k);
for(int i=0 ; i<n ; i++)
scanf("%d", &arr[i]);
for(int i=0 ; i<=k ; i++)
dp[i] = 0;
for(int i=0 ; i<n ; i++){
if (arr[i]>k) continue;
dp[arr[i]] += 1;
for (int j = arr[i]+1 ; j<=k ; j++){
dp[j] += dp[j-arr[i]];
}
}
printf("%d\\n", dp[k]);
return (0);
}
넘나 어렵...😢
if (arr[i]>k) continue;
안해주면 dp[arr[i]] += 1;
여기서 배열을 넘어감!!!!!!!!
(이거 찾는데 1시간..걸림)
위의 문제 안생기게 하려면 로 수정하기
#include <stdio.h>
int main(){
int n, k;
int arr[109], dp[20009];
scanf("%d %d", &n, &k);
for(int i=0 ; i<n ; i++)
scanf("%d", &arr[i]);
for(int i=0 ; i<=k ; i++)
dp[i] = 0;
dp[0] = 1;
for(int i=0 ; i<n ; i++){
if (arr[i]>k) continue;
//dp[arr[i]] += 1;
for (int j = arr[i] ; j<=k ; j++){
dp[j] += dp[j-arr[i]];
}
}
printf("%d\\n", dp[k]);
return (0);
}