#include<bits/stdc++.h> using namespace std; long long dp[110][1010]; int zhuan[110][1010]; int a[110]; int xuan(int x, int y) { int c[11]; int pii = 1; while(x) { c[pii] = x % 10 ; x /= 10; pii ++; } while(y --) { int t = c[pii - 1]; for(int i = pii - 1; i >= 2; i --) c[i] = c[i-1]; c[1] = t; } while(c[pii-1] == 0) pii --; int temp = 0; for(int i = pii - 1; i >= 1 ; i --) { temp = temp * 10 + c[i]; } return temp ; } int main() { int n,m; cin >> n >> m; for(int i = 1;i <= n ; i ++) { cin >> a[i]; } for(int i = 1; i <= n ; i ++) { for(int j = 0; j <= m; j ++) { zhuan[i][j] = xuan(a[i],j); } } for(int i = 1 ; i<= n ; i ++) dp[i][0] = a[i] + dp[i-1][0]; for(int i = 1 ; i<= n ; i ++) { for(int j = 0; j <= m ;j ++) { dp[i][j]=dp[i-1][j]; for(int k = 0 ; k <= j ; k ++) { dp[i][j] = max(dp[i][j],dp[i-1][k] + zhuan[i][j-k]); /*for(int u = 1; u <= n; u ++) cout << dp[i][u] << " "; cout << endl;*/ } } /*for(int u = 0 ; u <= m ; u ++) cout <<dp[i][u] << " "; cout << endl;*/ } int maxx = 0; cout << dp[n][m]; return 0; }
比较简单的dp题