51Nod-1510-最小化序列
来源:互联网 发布:淘宝运营计划方案 编辑:程序博客网 时间:2024/04/28 12:42
ACM模版
描述
题解
这个题,打眼一看就是贪心,然后我就贪心写了一下,
首先,贪心的思路是,我们需要将数据分为
其实,这里的第二部分我们不用动归也未尝不可,用
也许,上边就是我在胡诌,并不可行吧……懒得尝试了。
代码
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 3e5 + 10;const int MAXK = 5e3 + 10;int n, k;int A[MAXN];int dp[MAXK][MAXK];template <class T>inline bool scan_d(T &ret){ char c; int sgn; if (c = getchar(), c == EOF) { return 0; //EOF } while (c != '-' && (c < '0' || c > '9')) { c = getchar(); } sgn = (c == '-') ? -1 : 1; ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0' && c <= '9') { ret = ret * 10 + (c - '0'); } ret *= sgn; return 1;}int main(){ scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) { scan_d(A[i]); } sort(A, A + n); int t1 = n % k; int t2 = k - t1; k = n / k; dp[0][0] = 0; for (int i = 1; i <= t2; i++) { dp[i][0] = dp[i - 1][0] + A[i * k - 1] - A[(i - 1) * k]; } for (int j = 1; j <= t1; j++) { dp[0][j] = dp[0][j - 1] + A[j * (k + 1) - 1] - A[(j - 1) * (k + 1)]; } int k1, k2; for (int i = 1; i <= t2; i++) { for (int j = 1; j <= t1; j++) { k1 = (i - 1) * k + j * (k + 1); k2 = i * k + (j - 1) * (k + 1); dp[i][j] = min(dp[i - 1][j] + ((k1 + k) > n ? 0 : (A[k1 + k - 1] - A[k1])), dp[i][j - 1] + ((k2 + k + 1) > n ? 0 : (A[k2 + k] - A[k2]))); } } printf("%d\n", dp[t2][t1]); return 0;}
阅读全文
0 0
- 51Nod-1510-最小化序列
- 51nod1510 最小化序列
- 最小化序列
- 51nod 1341 混合序列
- 51nod-最长单增子序列
- 51nod 1400 序列分解
- 51Nod-1675-序列变换
- 51Nod-1341-混合序列
- 51nod 1675 序列变换
- 51Nod-1780-完美序列
- 51nod 1228 序列求和
- 51Nod-1522-上下序列
- 51Nod-1228-序列求和
- 子序列个数 51Nod
- 【51NOD 1675】序列变换
- 选择子序列 51Nod
- 51nod 1400 序列分解(DFS + 剪枝)
- 51nod 1134 最长递增子序列
- html之marquee详解
- 51Nod-1500-苹果曼和树
- html5新增标签
- debug date filter in logstash
- vue 组件之间使用eventbus传值
- 51Nod-1510-最小化序列
- 可编辑div:contenteditable之ctrl+enter换行,enter发送
- 线性表(List)---链式存储结构(双向链表)
- VirtualBox 创建com对象失败 应用程序被中断
- 1021 Fibonacci Again
- 1019 Least Common Multiple
- vue-cli更换端口号
- 4549 M斐波那契数列
- Kafka基本知识一 Producer and Consumer