code[vs] 1166矩阵取数游戏 (只是框架,未进行高精度)

/*
作者:桦清_L
*/
#include 
#include 
using namespace std;

int a[101];
int dp[101][101];

int main()
{
    int n,m;
    int sum=0;
    cin>>n>>m;
    for(int now=1;now<=n;now++)
    {
        memset(dp,0,sizeof(0));
        for(int i=1;i<=m;i++) {cin>>a[i]; dp[i][i]=a[i];}
        for(int g=2;g<=m;g++)  //组数
        {
            for(int i=1;i<=m-g+1;i++) //起点
            {
                int j=i+g-1; //组内终点
                /*1*2^1+x*2^2+3*2^3=2*(1+2*(2+2*3))*/
                dp[i][j]=max(a[i]+dp[i+1][j]*2,a[j]+dp[i][j-1]*2); 
            }
        }
     sum+=2*(dp[1][m]);
    }
    cout<



Ps:最近都在搞区间dp,发现这题并没有设置从起点移动到终点前一位的for循环,貌似以前做的可以改良一下 减少时间复杂度?

你可能感兴趣的:(动态规划)