ZUFE 问题 M: 数字旋转

#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题

猜你喜欢

转载自blog.csdn.net/Ant_e_zz/article/details/80378127