P1019小核桃与积木堆 普及- CSP-J组 排序 贪心 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1787/2245 题目描述 数字线上的某些整数坐标处有 n n 个积木,小核桃不喜欢积木四处散落。所以他打算搬动积木,堆成不超过 m m 堆的积木堆。将坐标值 X X 的积木全部搬到到坐标值 Y Y 处,需要消耗 ∣ X − Y ∣ ∣X−Y∣ 的能量。 计算小核桃把玩具堆成不超过 m m 堆需要消耗的最小能量值。 输入描述 第一行包含两个整数,之间以一个空格隔开,分别是 n n, m m, n n 代表积木总数量, m m 代表最大堆数。 第二行包含 n n 个整数, x i x i 表示积木 i i 所处坐标值为 a i a i ,之间以一个空格隔开。 输出描述 计算出把积木堆成不超过 m m 堆需要消耗的最小能量值。 input1 复制 4 1 10 5 3 12 output1 复制 9 input2 复制 4 2 1 20 3 100 output2 复制
```cpp #include <iostream> #include <vector> #include <algorithm> #include <climits> using namespace std; // 计算将一段区间内的积木移动到中位数位置所需的最小能量 int calculateCost(const vector<int>& positions, int left, int right) { vector<int> temp; for (int i = left; i <= right; ++i) { temp.push_back(positions[i]); } sort(temp.begin(), temp.end()); int median = temp[temp.size() / 2]; int cost = 0; for (int pos : temp) { cost += abs(pos - median); } return cost; } int main() { int n, m; cin >> n >> m; vector<int> positions(n); for (int i = 0; i < n; ++i) { cin >> positions[i]; } sort(positions.begin(), positions.end()); // dp[i][j] 表示将前 i 个积木堆成 j 堆所需的最小能量 vector<vector<int>> dp(n + 1, vector<int>(m + 1, INT_MAX)); dp[0][0] = 0; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= min(i, m); ++j) { for (int k = j; k <= i; ++k) { if (dp[k - 1][j - 1] != INT_MAX) { int cost = calculateCost(positions, k - 1, i - 1); dp[i][j] = min(dp[i][j], dp[k - 1][j - 1] + cost); } } } } int ans = INT_MAX; for (int j = 1; j <= m; ++j) { ans = min(ans, dp[n][j]); } cout << ans << endl; return 0; } ``` 代码解释: 1. calculateCost函数: - 该函数用于计算将一段区间内的积木移动到中位数位置所需的最小能量。 - 首先将该区间内的坐标值提取到一个临时数组中并排序。 - 找到中位数,计算每个坐标值与中位数的差值的绝对值之和,即为所需能量。 2. 主函数: - 读取输入的积木数量`n`和最大堆数`m`,以及每个积木的坐标值。 - 对坐标值进行排序。 - 定义二维数组`dp`,`dp[i][j]`表示将前`i`个积木堆成`j`堆所需的最小能量。 - 初始化`dp[0][0] = 0`,表示没有积木且不堆时能量为0。 - 通过三重循环填充`dp`数组,对于每个`i`和`j`,枚举所有可能的分割点`k`,计算将前`k - 1`个积木堆成`j - 1`堆,再将第`k`到第`i`个积木堆成一堆的总能量,并取最小值。 - 最后遍历`dp[n][1]`到`dp[n][m]`,找到最小能量值并输出。 [2026-02-07 18:38:58 | AI问答 | 780点数解答]
- [字节豆包] P1019小核桃与积木堆 普及- CSP-J组 排序 贪心 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1787/2245 题目描述 数字线上的某些整数坐标处有 n n 个积木,小核桃不喜欢积木四处散落。所以他打算搬动积木,堆成不超过 m m 堆的积木堆。将坐标值 X X 的积木全部搬到到坐标值 Y Y 处,需要消耗 ∣ X − Y ∣ ∣X−Y∣ 的能量。 计算小核桃把玩具堆成不超过 m m 堆需要消耗的最小能量值。 输入描述 第一行包含两个整数,之间以一个空格隔开,分别是 n n, m m, n n 代表积木总数量, m m 代表最大堆数。 第二行包含 n n 个整数, x i x i 表示积木 i i 所处坐标值为 a i a i ,之间以一个空格隔开。 输出描述 计算出把积木堆成不超过 m m 堆需要消耗的最小能量值。 input1 复制 4 1 10 5 3 12 output1 复制 9 input2 复制 4 2 1 20 3 100 output2 复制(780点数解答 | 2026-02-07 18:38:58)3
- [字节豆包] P1020小核桃与删除字符串 普及+/提高 CSP-J组 双指针 二分答案 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 1481/2524 题目描述 给一个长度为 n n 的 01 01 字符串,你可以任意选择下面两个操作任意次: 从左往右删除任意长度连续段 从右往左删除任意长度连续段 现在要求 m a x ( 删掉的 1 , 剩下的 0 ) max(删掉的1,剩下的0) 最小。 输入描述 输入一行只包含 01 01 的字符串。 输出描述 输出一个整数,表示答案。 input1 复制 1001001001001 output1 复制 3 input2 复制 111011001000 output2 复制 1用C++(330点数解答 | 2026-02-07 18:40:10)3
- [字节豆包] P1014禾木与数字区间 入门 新手组 if 语句 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 3691/5817 题目描述 星宇博士给禾木一个任务,让他根据给定的 a a 和 b b ,判断数字 x x 是否在 10 a 10 a 至 10 b 10 b 之间,下面请你编程帮助禾木完成这个任务吧。 输入格式 输入包括两行。 第一行包含两个正整数 a , b a,b ,表示数字的范围 a a 和 b b。 第二行包含一个正整数 x x ,表示给定的数字 x x。 输出格式 输出包括一行。 若 10 a ≤ x ≤ 10 b 10 a ≤x≤10 b ,输出 yes 。 若 10 b < x 10 b <x ,输出 big 。 若 x < 10 a x<10 a ,输出 small 。 input1 复制 1 3 22 output1 复制 yes input2 复制 1 2 333 output2 复制 big 提示 对于 100 % 100%(367点数解答 | 2026-02-07 18:34:36)3
- [字节豆包] P1014禾木与数字区间 入门 新手组 if 语句 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 3691/5817 题目描述 星宇博士给禾木一个任务,让他根据给定的 a a 和 b b ,判断数字 x x 是否在 10 a 10 a 至 10 b 10 b 之间,下面请你编程帮助禾木完成这个任务吧。 输入格式 输入包括两行。 第一行包含两个正整数 a , b a,b ,表示数字的范围 a a 和 b b。 第二行包含一个正整数 x x ,表示给定的数字 x x。 输出格式 输出包括一行。 若 10 a ≤ x ≤ 10 b 10 a ≤x≤10 b ,输出 yes 。 若 10 b < x 10 b <x ,输出 big 。 若 x < 10 a x<10 a ,输出 small 。 input1 复制 1 3 22 output1 复制 yes input2 复制 1 2 333 output2 复制 big 提示 对于 100 % 100%(368点数解答 | 2026-02-07 18:35:01)3
- [字节豆包] P1015禾木与栅栏 普及- 模拟 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2998/4446 题目描述 面条老师给禾木一个任务,让他根据给定的 n n 和 k k ,打印出一个栅栏图案,这个栅栏应该分成 n n 段,段与段之间的间隔为 | ,段内的填充为 k k 个 = 。 例如 n = 5 , k = 6 n=5,k=6 时,栅栏图案如下: 复制 |======|======|======|======|======| 输入格式 输入包括一行,包含两个整数 n , k n,k,表示栅栏的段数和每一段中填充的数量。 输出格式 输出包括一行,表示符合要求的栅栏图案。 input1 复制 1 1 output1 复制 |=| input2 复制 5 5 output2 复制 |=====|=====|=====|=====|=====| 提示 对于 100 % 100% 的数据,保证 1 ≤ n , k ≤ 15 1≤n,k≤15,用C++(160点数解答 | 2026-02-07 18:36:06)3
- [DeepSeek] - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内 (571点数解答 | 2025-08-23 20:54:40)197
- [DeepSeek] - ItemId: 12720 #道具id A级赛车 雷诺 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 127758 #道具id 宠物 冰凤 ItemNum: 1 #数量 ObtainTime: 1 #时间 AvailPeriod: -1 #0显示数量 -1显示永久 - ItemId: 21980 #道具id 效率宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 - ItemId: 21986 #道具id 重生宝珠LV4 ItemNum: 100 #数量 ObtainTime: 1 #时间 AvailPeriod: 0 #0显示数量 -1显示永久 这种文本文件如何用易语言读入并显示到超级列表框内,并且可以增加新的一样的文本(1317点数解答 | 2025-08-23 20:58:40)203
- [字节豆包] P1013禾木买铅笔 入门 新手组 简易运算 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 5398/7864 题目描述 宇航老师给了禾木 a a 元 b b 角钱去购买铅笔,已知一支铅笔价格为 x x 元 y y 角,请你编程帮助禾木算出他可以购买几支铅笔。 输入格式 输入包括两行。 第一行包含两个正整数 a , b a,b ,表示宇航老师给禾木的钱为 a a 元 b b 角。 第二行包含两个正整数 x , y x,y ,表示铅笔的价格为 x x 元 y y 角。 输出格式 输出包括一行,包含一个整数,代表禾木可以购买铅笔的数量。 input1 复制 4 6 2 3 output1 复制 2 input2 复制 100 5 2 3 output2 复制 43 提示 对于 100 % 100% 的数据,保证: 1 ≤ a , x ≤ 10 5 1≤a,x≤10 5 , 0 ≤ b , y ≤ 9 0≤b,y≤9。 用C++(390点数解答 | 2026-02-07 18:42:51)3
- [字节豆包] P1018小核桃与数组规则 普及- CSP-J组 排序 线性DP 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 2225/2901 题目描述 小核桃身处在一个神秘的逃生游戏中,他需要通过解决各种谜题来获得能够帮助他逃脱的物品。在一道谜题中,小核桃被赋予了一个整数数组和一组规则,让他按顺序进行操作。以下是给小核桃的指示:给定一个整数数组,请按以下方法计算得分最高的方案: 首先选择一个整数 v v 并删除数组中所有等于 v v 的元素,并将它们的总和加入积分中。 同时,删除数组中所有等于 v + 1 v+1 或 v − 1 v−1 的元素,这些元素不得分。 重复上述步骤,直到数组中没有更多的元素为止。 现在,小核桃需要计算按照这些规则可以获得的最大分数是多少? 输入描述 第一行包含一个整数 n n,表示有 n n 个整数。 第二行包含 n n 个整数,表示第 i i 个数字值为 a i a i ,之间以一个空格隔开。 输出描述 计算出小核桃按照规则可以获得的最大分数。 input1 复制 (555点数解答 | 2026-02-07 18:38:00)2
- [字节豆包] P2239函数计算 标准IO 传统题 来源 TomAnderson 时间限制 1000ms 内存限制 256MB 通过/尝试次数 18036/33571 题目描述 在自定义函数 f (x) f(x) 中:当 x x 为奇数时计算 f(x)=x∗2+3 当 x x 为偶数时计算 f(x)=x/2+7 。 请你编写程序,输入三个正整数 a,b,c ,请你计算 f(a)+f(b)+f(c)的结果。 输入格式 一行,三个正整数 a,b,c。 输出格式 一个整数,即计算结果。 input1 复制 1 2 3 output1 复制 22 input2 复制 2 3 2 output2 复制 25 数据规模与约定 对于 100 % 100% 的数据, 2 ≤ n ≤ 10000 2≤n≤10000。 C++(295点数解答 | 2026-01-17 20:01:12)100
- [DeepSeek] 题目描述 输入四个整数 x , y , a , b x,y,a,b,请你按照要求输出 x ∼ y x∼y 之间的所有数。 要求: 不要输出数字 a a。 不要输出大于等于数字 b b 的数。 输入格式 输入包括一行,包含四个整数 x , y , a , b x,y,a,b,数字之间用空格隔开。 输出格式 输出包括一行,为 x ∼ y x∼y 之间符合要求的数字。 input1 复制 10 20 13 17 output1 复制 10 11 12 14 15 16 input2 复制 50 55 52 100 output2 复制 50 51 53 54 55 样例解释 对于样例 1 1: 样例要求输出 10 ∼ 20 10∼20 之间不是 13 13, 且小于 17 17 的数,故有 10 , 11 , 12 , 14 , 15 , 16 10,11,12,14,15,16。 数据规模与约定 对于 100 % 100% 的数据, 1 ≤ x ≤ y ≤ 100 1≤x≤y≤100, x ≤ a ≤ y x≤a≤y, x ≤ b x≤b。 C++程序(138点数解答 | 2025-07-19 20:44:46)328
- [字节豆包] 题目描述 输入四个整数 x , y , a , b x,y,a,b,请你按照要求输出 x ∼ y x∼y 之间的所有数。 要求: 不要输出数字 a a。 不要输出大于等于数字 b b 的数。 输入格式 输入包括一行,包含四个整数 x , y , a , b x,y,a,b,数字之间用空格隔开。 输出格式 输出包括一行,为 x ∼ y x∼y 之间符合要求的数字。 input1 复制 10 20 13 17 output1 复制 10 11 12 14 15 16 input2 复制 50 55 52 100 output2 复制 50 51 53 54 55 样例解释 对于样例 1 1: 样例要求输出 10 ∼ 20 10∼20 之间不是 13 13, 且小于 17 17 的数,故有 10 , 11 , 12 , 14 , 15 , 16 10,11,12,14,15,16。 数据规模与约定 对于 100 % 100% 的数据, 1 ≤ x ≤ y ≤ 100 1≤x≤y≤100, x ≤ a ≤ y x≤a≤y, x ≤ b x≤b。c++ (304点数解答 | 2025-10-25 20:12:27)72