社区讨论

关于拼数,问难度

P1012[NOIP 1998 提高组] 拼数参与者 8已保存回复 12

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
10 条
当前快照
1 份
快照标识符
@mkhvdb31
此快照首次捕获于
2026/01/17 13:31
上个月
此快照最后确认于
2026/01/17 17:18
上个月
查看原帖
这个 O(n3)O(n^3) 不挺好想的吗。
采用 dpdp 思想,设 dpidp_i 为已经排好了前 ii 个数的结果。然后暴力枚举下插入位置,共 n+1n+1 个位置,暴力模拟插入。
CPP
#include<bits/extc++.h>
using namespace std;
vector<string> ans;
string a[21];
signed main(){
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++){
        string tans=a[i];
        vector<string> tans2;
        for(auto j:ans){
            tans+=j;
        }
        tans2.push_back(a[i]);
        for(auto j:ans){
            tans2.push_back(j);
        }
        for(int j=0;j<=ans.size();j++){//在后面插入
            vector<string> nowa=ans;
            nowa.insert(j+nowa.begin(),a[i]);
            string txt="";
            for(auto k:nowa){
                txt+=k;
            }
            if(txt>tans)tans=txt,tans2=nowa;
        }
        ans=tans2;
    }
    for(auto i:ans)cout<<i;
    return 0;
}
问一下这个做法难度如何

回复

12 条回复,欢迎继续交流。

正在加载回复...