本文主要是介绍gems gems gems HDU - 6199 (dp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前写完了被吞了。。。
懒的再写一遍
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <queue>
#include <cmath>#define ll long long
using namespace std;
const int maxn = 2e4+5;
const int mod = 233;
ll dp[2][maxn][210];
ll V[maxn];
ll sum[maxn];
int main()
{int T;scanf("%d",&T);while(T--){memset(dp,0,sizeof(dp));int n;scanf("%d",&n);for(int i=1; i<=n; i++)scanf("%lld",&V[i]);sum[0] = 0;for(int i=1; i<=n; i++)sum[i] = sum[i-1]+V[i];for(int i=n; i>=1; i--){int mxj1 = n-i+1;int mxj2 = sqrt(2.0*i) + 1;for(int j=1; j<=min(mxj1,mxj2); j++){if(i+j==n+1){dp[0][i][j] = sum[n]-sum[i-1];dp[1][i][j] = (-sum[n]+sum[i-1]);continue;}if(i+j+j<=n+1){dp[0][i][j] =dp[1][(i+j)][j];dp[1][i][j] =dp[0][(i+j)][j];}if(i+j+j+1<=n+1){dp[0][i][j] =min(dp[0][i][j],dp[1][(i+j)][j+1] );dp[1][i][j] =max(dp[1][i][j],dp[0][(i+j)][j+1]);}dp[0][i][j] += (sum[i+j-1] - sum[i-1]);dp[1][i][j] += (-sum[i+j-1] + sum[i-1]);}}ll ans;ans = dp[0][1][1];if(n>=2)ans = max(ans,dp[0][1][2]);printf("%lld\n",ans);}return 0;
}
这篇关于gems gems gems HDU - 6199 (dp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!