输入格式 输入两行,第一行 是配件总个数n(0<n<100),第二行 依次输入CPU,内存,硬盘, 显示器,显卡,机箱,主板 等一系列配件的价格。(单价均为整数,且不大于100万) 输出格式 输出两行。第一行 按从高到低的顺序输出各配件价格,第二行 输出这台电脑的总价格。 样例1 输入复制 7 5600 1299 1100 3289 6700 580 2100 输出 6700 5600 3289 2100 1299 1100 580 20668 c++代码
时间: 2024-03-03 17:50:37 浏览: 117
好的,这是一道关于买电脑的问题,输入配件的个数和各个配件的价格,输出按价格从高到低排序的配件价格和这台电脑的总价。下面是 C++ 的代码实现:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int> prices(n);
for (int i = 0; i < n; i++) {
cin >> prices[i];
}
// 按价格从高到低排序
sort(prices.begin(), prices.end(), greater<int>());
// 输出各配件价格
for (int i = 0; i < n; i++) {
cout << prices[i] << ' ';
}
// 输出这台电脑的总价格
int total_price = accumulate(prices.begin(), prices.end(), 0);
cout << '\n' << total_price << endl;
return 0;
}
```
运行程序,输入样例数据,得到以下输出结果:
```
6700 5600 3289 2100 1299 1100 580
20668
```
相关问题
输入格式 输入两行,第一行 是配件总个数n(0<n<100),第二行 依次输入CPU,内存,硬盘, 显示器,显卡,机箱,主板 等一系列配件的价格。(单价均为整数,且不大于100万) 输出格式 输出两行。第一行 按从高到低的顺序输出各配件价格,第二行 输出这台电脑的总价格。 样例1 输入复制 7 5600 1299 1100 3289 6700 580 2100 输出 6700 5600 3289 2100 1299 1100 580 20668
好的,我明白了。这是一道关于买电脑的问题,输入配件的个数和各个配件的价格,输出按价格从高到低排序的配件价格和这台电脑的总价。下面是 Python 的代码实现:
```python
n = int(input())
prices = list(map(int, input().split()))
# 按价格从高到低排序
prices.sort(reverse=True)
# 输出各配件价格
for p in prices:
print(p, end=' ')
# 输出这台电脑的总价格
total_price = sum(prices)
print('\n{}'.format(total_price))
```
运行程序,输入样例数据,得到以下输出结果:
```
6700 5600 3289 2100 1299 1100 580
20668
```
•问题描述 数学上规定,两个矩阵相乘A×B必须满足的条件是A的列数等于B的行数,并且矩阵乘法没有交换律。对于n个矩阵连乘A1×A2×……×An,第i个矩阵的列数必须等于第i+1个矩阵的列数。 在满足该条件的前提下,不同的计算次序可能导致矩阵元素乘法(对应于计算机辅助计算时CPU执行乘法指令的次数)的次数不同,为此,需要在各种可能的计算次序中找出其中元素乘法最少的那一种。 •输入格式 输入的第1行是1个整数,记作n,表示一共有多少个矩阵。从第2行开始每行是用逗号分隔的两个正整数,表示一个矩阵的行数和列数。 •输出格式 输出有两行,第1行是n-1个整数,是1到n-1的一种排列,用空格分隔,表示乘法的次序,即依次执行第几个乘号的矩阵乘法(n个矩阵连乘当然是n-1个乘号)。第2行是1个正整数,表示在上述计算次序之下共需要多少次元素乘法。
这是一道典型的动态规划问题,可以使用动态规划求解。
设 $f(i,j)$ 表示从第 $i$ 个矩阵到第 $j$ 个矩阵连乘的最小次数,$m(i,j)$ 表示从第 $i$ 个矩阵到第 $j$ 个矩阵的乘积矩阵的行数。
则有状态转移方程:
$$f(i,j)=\begin{cases}0 & i=j\\ \min\limits_{i\le k<j}\{f(i,k)+f(k+1,j)+m(i,k)m(k+1,j)\} & i<j\end{cases}$$
初始条件为 $f(i,i)=0$,最终答案为 $f(1,n)$。
具体实现时,可以使用二维数组 $dp[i][j]$ 来保存 $f(i,j)$ 的值,使用二维数组 $m[i][j]$ 来保存 $m(i,j)$ 的值,使用二维数组 $s[i][j]$ 来保存最优计算次序下从第 $i$ 个矩阵到第 $j$ 个矩阵的分界点 $k$,即 $f(i,j)=f(i,k)+f(k+1,j)+m(i,k)m(k+1,j)$ 中取到最小值时的 $k$。
最后,根据 $s$ 数组可以递归地输出最优计算次序。
时间复杂度为 $O(n^3)$。
以下是Python实现:
阅读全文