#include #include #include #include using namespace std; void calc(int go[], int min[], int from, int to){ if(from != to){ //先へ移動 if(from + go[from] <= to){ if(min[from] + 1 < min[ from + go[from] ]){ min[from + go[from]] = min[from] + 1; calc(go, min, from + go[from], to); } } //前へ移動 if(from - go[from] >= 0){ if(min[from] + 1 < min[ from - go[from] ]){ min[from - go[from]] = min[from] + 1; calc(go, min, from - go[from], to); } } } } int main(){ //始まりの数値は1 const int Max = 10000; int go[Max] = {0}; int min[Max]; int n; int least; cin >> n; //移動可能数算出 for(int i=0; i 0){ if(least % 2 == 1){ go[i] ++; } least /= 2; } } //min表初期化 for(int i=0; i