输入描述 第一行为一个整数 � n ,表示衣服的数量。 第二行包括 � n 个整数 � 1 , � 2 . . . � � a 1 ,a 2 ...a n 表示第 � i 件衣服的邮费为 � � a i 元。 ( 1 ≤ � ≤ 1 0 5 , 1 ≤ � � ≤ 1 0 9 1≤n≤10 5 ,1≤a i ≤10 9 ) 输出描述 输出一个整数表示小明所要花费的最小代价。
时间: 2023-05-20 16:02:05 浏览: 132
这是一个动态规划问题,可以使用贪心算法来解决。首先将衣服按照邮费从小到大排序,然后从最小的衣服开始,依次计算每个衣服的最小代价。对于第i件衣服,其最小代价为前i-1件衣服的最小代价加上第i件衣服的邮费和前i-1件衣服中最大的邮费中的较小值。具体实现可以参考以下代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + 5;
int n, a[MAXN];
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
sort(a + 1, a + n + 1);
long long ans = a[1];
for (int i = 2; i <= n; i++) {
ans += min(a[i], a[i - 1]);
}
cout << ans << endl;
return 0;
}
相关问题
第一行输入一个整数n表示行数,以后每行一个整数,代码如何写
n = int(input()) # 输入行数n
for i in range(n):
num = int(input()) # 输入每行一个整数num
# 在此对num进行想要实现的操作,例如输出num的平方
print(num*num)
C中如何第一行输入一个数N,第二行输入N个正整数
您可以使用以下代码实现:
```
#include <stdio.h>
int main() {
int N;
printf("请输入一个数N:");
scanf("%d", &N);
printf("请输入N个正整数:");
int nums[N];
for (int i = 0; i < N; i++) {
scanf("%d", &nums[i]);
}
printf("您输入的N个正整数为:");
for (int i = 0; i < N; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
```