#include <iostream> using namespace std; int main() { int N; int dp[100001]={0}; cin >> N; for(int i=1; i <=N ; i++) { for(int j=1; j*j <= i; j++) if(dp[i]>dp[i-j*j]+1 || dp[i]==0) dp[i]=dp[i-j*j]+1; } cout << dp[N]; } |
며칠 고민해도 접근이 어려워 다른 사람 코드를 봤다.
현재 dp값이 앞으로의 값보다 더 큰 건 당연, 그 기점 찾기 위한 조건 dp[i]>dp[i-j*j]+1
'알고리즘 문제 풀이 > 1DP_과제(~180615)' 카테고리의 다른 글
1710221_2302_극장좌석 (0) | 2017.10.21 |
---|---|
171020_11048_이동하기 (0) | 2017.10.20 |
171018_p를 출력하는 프로그램 p (0) | 2017.10.18 |
171017_2011_암호코드 (0) | 2017.10.17 |
171016_6359_만취한 상범 (0) | 2017.10.16 |