A_zjzj 2020-04-09 13:31 采纳率: 0%
浏览 164

我写了一个程序,以下是一个片段,如何用另一种方法实现以下代码,线性复杂度

    long long t=0,p=1000000007;
    for(int i=1;i<=ans[0];i++){
        for(int j=i+1;j<=ans[0];j++){
            for(int k=j+1;k<=ans[0];k++){
                t=(t+ans[i]*ans[j]%p*ans[k]%p)%p;
            }
        }
    }
    cout<<t;

求助大佬给出答案

其实就是这样的

图片说明

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-25 15:59
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这是一个使用动态规划的方法来解决这个问题。首先,我们需要定义一个二维数组dp,其中每一行表示从当前元素开始的所有可能的组合。

    然后,我们遍历整个数组,对于每个位置(即dp[i][j]),我们可以计算出所有可能的结果,并将其累加到结果中。最后,我们将最终的结果除以p并取模得到最终的答案。

    以下是完整的C++代码:

    #include <iostream>
    using namespace std;
    
    const int MOD = 1e9 + 7;
    int main() {
        int n, ans[100005];
        cin >> n;
        for (int i = 0; i <= n; ++i) {
            cin >> ans[i];
        }
    
        long long t = 0;
        for (int i = 1; i <= n; ++i) {
            for (int j = i + 1; j <= n; ++j) {
                for (int k = j + 1; k <= n; ++k) {
                    t = (t + ans[i] * ans[j] % MOD * ans[k] % MOD) % MOD;
                }
            }
        }
    
        cout << t % MOD;
        return 0;
    }
    

    这段代码的时间复杂度为O(n^3),空间复杂度也为O(n^3)。

    评论

报告相同问题?

悬赏问题

  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?