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; }