1 条题解

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

    C++ :

    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    int f[10010];
    int word[10010];
    int n,num;
    int main()
    {
        scanf("%d\n",&n);
        num=0;
        char s[101];
        while (scanf("%s",s)!=EOF)
        word[++num]=strlen(s);
        memset(f,255,sizeof(f));
        f[0]=0;
        for (int i=0;i<num;i++){
            int len=0;
            for (int j=1;1;j++){
                if (i+j>num) break;
                int bad=0;
                len=len+word[i+j];
                if (len+j-1>n) break;
                if (j==1&&len<n) bad=500;
                else if (j==1) bad=0;
                else
                {
                    int k,kk;
                    k=(n-len)/(j-1);
                    kk=(n-len)-k*(j-1);
                    bad=kk*k*k+(k-1)*(k-1)*(j-kk-1);
                }
                if ((f[i]+bad<f[i+j])||(f[i+j]==-1)) f[i+j]=f[i]+bad;
            }
        }
        printf("Minimal badness is %d.\n",f[num]);
        return 0;
    }
    
    • 1

    信息

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