//https://www.acmicpc.net/problem/11722 #include using namespace std; int main(){ int A[1001]; int dp[1001]; int N,x,max; cin >> N; for(int i=1; i> A[i]; dp[1]=1; for(int i=2; i0; j--) { x=1; //자기 자신의 길이가 최초인 경우 항상 1 if(A[i]
//https://www.acmicpc.net/problem/11060 #include using namespace std; int main(){ int N; cin >> N; int A[1001]; int dp[1001]; int min; for(int i=1; i> A[i]; dp[1]=0; for(int i=2; i0; j--) { if(i-j==101) break; if(j+A[j]>=i && dp[j]!=-1) if(min>dp[j]+1) min=dp[j]+1; } if(min==1001) dp[i]=-1; else dp[i]=min; } cout i로 이동해 올 수 있는 값들을 j라고 한다면, i-100부터 i-1까지가 j의 범위, 또는 i가 100보다 작은 경우에는 1번 칸까지 탐색하면 됨...