1 条题解

  • 1
    @ 2026-4-26 13:17:19

    美味糖果
    题意
    小青有 n 颗糖果,第 i 颗糖果的基础美味值为 a_i 。
    她会按某种顺序吃完所有糖果。第一颗糖果不会产生额外美味值。
    如果当前吃的糖果美味值为 a_i ,上一颗吃的糖果美味值为 a_{i-1} ,那么这一次额外获得的美味值 为:
    求一种吃糖顺序,使总额外美味值最大。
    思路
    本题 n <= 8 ,数量非常小,可以直接枚举所有情况,我们使用dfs来搜索所有情况。
    对每一种排列,计算相邻两颗糖果产生的额外美味值总和,取最大值即可。
    注意答案可能较大,使用 long long 。
    复杂度
    时间复杂度: O(n! * n)
    空间复杂度: O(n)
    参考代码:

    #include<bits/stdc++.h>
    using namespace std;
    int vis[10];
    int ans;
    int res;
    
    int n;
    int a[10];
    void dfs(int len,int lst) {
    if(len==0) {
    ans=max(ans,res);
    return;
    }
    for(int i=1;i<=n;i++){
    if(vis[i]) continue;
    vis[i]=1;
    if(lst!=0){
    res+=(a[i]-a[lst])*(a[i]-a[lst])+2*(a[i]+a[lst]);
    }
    dfs(len-1,i);
    vis[i]=0;
    if(lst!=0){
    res-=(a[i]-a[lst])*(a[i]-a[lst])+2*(a[i]+a[lst]);
    }
    }
    }
    int main() {
    // freopen("test9.in","r",stdin);
    // freopen("test9.out","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    dfs(n,0);
    cout<<ans;
    }
    

    求赞,谢谢!

    信息

    ID
    2936
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    97
    已通过
    23
    上传者