题意:
从 前往后跳,要么跳一步,跳到相邻的位置,要么跳到下一个数字相同的位置,求跳到最后的最少步数。
dp,但是会tle,我用map优化了一下。
1 #include2 3 using namespace std; 4 5 6 const int inf = 0x3f3f3f3f; 7 int a[200005]; 8 int dp[200005]; 9 10 int main() {11 12 int n;13 while(~scanf("%d",&n)) {14 for(int i=0;i maps;21 maps[a[0]] = 0;22 for(int i=1;i 0) {25 dp[i] = min(dp[i],maps[a[i]] + 1);26 maps[a[i]] = dp[i];27 }28 else {29 maps[a[i]] = dp[i];30 }31 }32 printf("%d\n",dp[n-1]);33 34 }35 36 return 0;37 }