https://www.acmicpc.net/problem/2293
이전에 풀었던 붕어빵 판매하기와 유사한 문제이다.
차이점은 최대 수익이 아닌 해당 가치에 대한 경우의 수를 구하는 문제이다.
저장하려는 변수 값을 dp라고 가정한다면
dp[0]에 1을 저장한 다음에 첫 번째 종류의 동전의 가치만큼 계속해서 저장해주면 된다.
만약 그 가치가 2였다면
dp[0+2]=dp[0+2]+dp[0]
dp[1+2]=dp[1+2]+dp[1]
...
와 같이 진행된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | #include <iostream> #include <algorithm> using namespace std; int main(){ int n,k; cin>>n>>k; int arr[101]; int dp[10001]={0}; for(int i=1;i<=n;i++) scanf("%d",&arr[i]); dp[0]=1; for(int i=1;i<=n;i++) for(int j=0;j+arr[i]<=k;j++) if(dp[j]) dp[j+arr[i]]+=dp[j]; cout<<dp[k]<<endl; return 0; } | cs |
'알고리즘(BOJ) > DP' 카테고리의 다른 글
백준 2167번 - 2차원 배열의 합 (0) | 2018.01.25 |
---|---|
백준 11727번 - 2xn 타일링2 (0) | 2018.01.25 |
백준 11052번 - 붕어빵 판매하기 (2) | 2018.01.25 |
백준 11053번 - 가장 긴 증가하는 부분 수열 (0) | 2018.01.25 |
백준 10844번 - 쉬운 계단 수 (0) | 2018.01.25 |