Codeforces Round #672 (Div. 2)C1. Pokémon Army (easy version)【dp】

    科技2022-09-02  131

    题目

    输入 3 3 0 1 3 2 2 0 1 2 7 0 1 2 5 4 3 6 7 输出 3 2 9

    题意:t组测试样例,下面两个数n,m;在下面是n个数,从中按顺序选不超过n个数满足这几个数的先加后减运算值最大.

    思路:dp[i][0]表示这一个数应该进行的是减法,当然也可以对这个数不操作 dp[i][1]表示这一个数应该进行的是加法

    AC code

    #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<map> #include<sstream> #include<stack> #include<queue> using namespace std; #define ll long long ll n,t,m,a[360000],dp[360000][2]; void solve() { ll i,s=0,ans=0; memset(dp,0,sizeof(dp)); for( i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) { dp[i][0]=max(dp[i-1][0],dp[i-1][1]-a[i]); dp[i][1]=max(dp[i-1][1],dp[i-1][0]+a[i]); } printf("%lld\n",max(dp[n][1],dp[n][0])); } int main() { ios::sync_with_stdio(0); cin>>t; while(t--) { cin>>n>>m; solve();} }
    Processed: 0.029, SQL: 9