E. Generate a String(dp)

https://codeforces.com/problemset/problem/710/E


思路:挺有意思的一道题。

直接去想的话会发现删除是有后效性的。

但是先奇偶讨论可以得知,对于当前点是偶数,如果后面更新过来不如前面一个减掉再乘。因此对于偶数不用考虑后来的。于是对于奇数的后效性考虑,奇数的后面一个是偶数,可以从前面一个乘到后面再减来更新这个点的dp状态。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#define debug(a) cout<<#a<<"="<>n>>x>>y;
   for(LL i=1;i<=n;i++){
       if(i%2==0){
          dp[i]=min(dp[i-1]+x,dp[i/2]+y);
       }
       else if(i&1){
          dp[i]=min(dp[i-1]+x,dp[(i+1)/2]+y+x);
       }
   }
   cout<

 

你可能感兴趣的:(dp)