Flight Boarding Optimization
来源:互联网 发布:windows 虚拟机下载 编辑:程序博客网 时间:2024/06/05 10:01
Gym - 100269F
暴力dp,f[i][k]表示前 i 个座位分了 k 次,总和最小是多少,可以从 f[j][k-1]转移过来,只需要预处理出 [j,i-1] 对 [i,s] 的影响就好了,用前缀和挺容易维护的。
#include <bits/stdc++.h>using namespace std;const int maxn = 1010;const int maxx = maxn*maxn*10;int f[maxn][maxn], a[maxn], ans, n, s, kk, g[maxn][maxn], sum[maxn][maxn];int main() { freopen("flight.in","r",stdin); freopen("flight.out","w",stdout); scanf("%d %d %d", &n, &s, &kk); kk--; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); for (int j = 1; j < i; j++) if (a[j] < a[i]) g[a[j]][a[i]]++; } for (int i = 1; i <= s; i++) for (int j = 1; j <= s; j++) { sum[i][j] = sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+g[i][j]; } for (int i = 1; i <= s; i++) for (int j = 0; j <= kk; j++) f[i][j] = maxx; ans = sum[s][s]; f[1][0] = sum[s][s]; for (int i = 2; i <= s; i++) for (int j = 1; j < i; j++) for (int k = 0; k < j && k < kk; k++) { f[i][k+1] = min(f[i][k+1], f[j][k]-(sum[i-1][s]-sum[j-1][s]-sum[i-1][i-1]+sum[j-1][i-1])); ans = min(ans, f[i][k+1]); } printf("%d\n", ans);}
阅读全文
0 0
- Flight Boarding Optimization
- Flight Boarding Optimization
- HNU 12849 Flight Boarding Optimization
- HNU-Flight Boarding Optimization的一些感想
- codeforce Gym100269F——Flight Boarding Optimization(动态规划)
- Flight
- Flight
- optimization
- optimization
- Optimization
- optimization
- optimization
- Flight Model
- FLIGHT-DOC
- flight Itinerary
- Snapdragon Flight
- Flight HDU
- Flight Yesterday
- 23.List集合
- 类似通讯录的A-Z字母分组实现
- LigerUI表格的简单做法
- 背包dp
- TCP和UDP的区别
- Flight Boarding Optimization
- java多线程脏读演式
- redhat linux安装mysql数据库
- spring学习笔记二 属性配置
- Tools
- 启动子容器失败:A child container failed during start
- 单例模式
- PCA详解
- 身份证识别SDK开发包20170904