酷代码 AI
菜单
服务商

Cpp实现计算所有组合数组价值之和并取模

```cpp #include <iostream> #include <vector> #include <algorithm> const int MOD = 1e9 + 7; // 计算组合数 C(n, k) int comb(int n, int k) { std::vector<std::vector<int>> dp(n + 1, std::vector<int>(k + 1, 0)); for (int i = 0; i <= n; ++i) { dp[i][0] = 1; if (i <= k) dp[i][i] = 1; for (int j = 1; j < i && j <= k; ++j) { dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j]) % MOD; } } return dp[n][k]; } int main() { int n, k; std::cin >> n >> k; std::vector<int> nums(n); for (int i = 0; i < n; ++i) { std::cin >> nums[i]; } std::sort(nums.begin(), nums.end()); long long ans = 0; for (int i = 0; i < n; ++i) { for (int j = i + 1; j < n; ++j) { int diff = nums[j] - nums[i]; // 计算包含 nums[i] 和 nums[j] 的组合数 int count = comb(j - i - 1, k - 2); ans = (ans + (long long)diff * count) % MOD; } } std::cout << ans << std::endl; return 0; } ``` ### 代码解释 1. **组合数计算**:使用动态规划的方法计算组合数 `C(n, k)`。 2. **排序数组**:将输入的数组进行排序,方便后续计算差值。 3. **计算价值之和**:通过两层循环遍历数组,计算每对数字的差值,并计算包含这两个数字的组合数,将差值乘以组合数累加到答案中。 4. **取模**:由于答案可能很大,每次计算后对 `1e9 + 7` 取模。 ######[AI问答 | 546点数解答 | 2026-03-28 12:58:25]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]