1821:【00NOIP提高组】乘积最大

//dp QAQ 
#include<bits/stdc++.h>
using namespace std;
long long a[11][11],f[11][11];
long long s;
int main()
{
    int n,K,p,i,j,k;
    cin>>n>>K;
    cin>>s;
    for(i=n;i>=1;i--)
    {
        a[i][i]=s%10;
        s/=10;
    }
    for(i=2;i<=n;i++)
     for(j=i-1;j>=1;j--)
      a[j][i]=a[j][i-1]*10+a[i][i];
    for(i=1;i<=n;i++)
     f[i][0]=a[1][i];
    for(k=1;k<=K;k++)//先枚举阶段 
    {
        for(i=k+1;i<=n;i++)//状态(阶段变量,我也不知道是啥) 
         for(j=k;j<i;j++)//决策,即断点。这些都是一个一天到晚看电脑皮肤贼差的dalao告诉我的我自己也不知道我打的是啥 
         f[i][k]=max(f[i][k],f[j][k-1]*a[j+1][i]);     
     } 
    cout<<f[n][K];
    return 0;
}

 

posted @ 2019-10-21 21:00  Gold_stein  阅读(990)  评论(1编辑  收藏  举报