首页 > 其他 > 详细

D. Min Cost String

时间:2021-04-26 11:02:40      阅读:22      评论:0      收藏:0      [点我收藏+]

如果满足s[i]=s[j]并且s[i+1]=s[j+1],那么产生一个贡献

要求给你一个k表示只能使用前k个字母,构造出长度为n的字符串,使其总贡献最小。

 a ab ac ad ... b bc bd be ... y yz z作为一一个长度为2的块不重复的零贡献周期 重复这个周期一定是最优的

为什么?

这样的周期接周期 ,每次相同的块数量只多一个。

而每块的花费是 块数*(块数-1)/2 (想一想为什么)

如果那另 a块 次数增加  b块次数对应减少 发现贡献是变大了的

所以尽量让各个块之间出现次数相等

 

    cin>>n>>k;
    while(1){
        for(int i=0;i<k;++i){
            for(int j=i;j<k;++j){
                cout<<"="<<(char)(a+i);
                n--;
                if(n==0)    return ;
                if(j!=i){
                    cout<<(char)(a+j);
                    n--;
                }
                if(n==0)    return ;
            }
        }
    }

 

D. Min Cost String

原文:https://www.cnblogs.com/PdrEam/p/14702583.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!