1 条题解

  • 0
    @ 2025-4-12 21:33:29

    C++ :

    #include<iostream>
    #include<string>
    using namespace std;
    const int N(10000+5);
    int n,t,f[N],len[N];
    string word[N];
    //ifstream cin("format.in");
    //ofstream cout("format.out");
    void init();
    void solve();
    int main()
    {
        init();
        solve();
        //system("pause");
        return 0;
    }
    void init()
    {
        cin>>n;
        t=1;
        while (cin>>word[t]) t++;
        t--;
        len[0]=0;
        for (int i=1;i<=t;i++)
            len[i]=len[i-1]+word[i].size();
    }
    void solve()
    {
        f[0]=0;  f[1]=500;
        for (int i=2;i<=t;i++)
        {
            if (word[i].size()<n) f[i]=f[i-1]+500;
            else f[i]=f[i-1];   //当前单词长度等于限制宽度时 
            for (int j=2;j<=i&&len[i]-len[i-j]+j-1<=n;j++)
            {
                int x,y,z,s=0;
                z=n-(len[i]-len[i-j]);
                x=z/(j-1);
                y=z%(j-1);
                for (int k=1;k<=y;k++) s+=x*x;
                for (int k=1;k<=j-1-y;k++) s+=(x-1)*(x-1);
                f[i]=min(f[i],f[i-j]+s);
            }
        }
        cout<<"Minimal badness is "<<f[t]<<".\n";
    }
    
    • 1

    信息

    ID
    90
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者