Codeforces 626F Group Projects (DP)
来源:互联网 发布:四九算法是虚岁 编辑:程序博客网 时间:2024/04/28 06:12
官方题解很详细
This is a dynamic programming problem. Notice that the total imbalance of the groups only depends on which students are the maximum in each group and which are the minimum in each group. We thus can think of groups as intervals bounded by the minimum and maximum student. Moreover, the total imbalance is the sum over all unit ranges of the number of intervals covering that range. We can use this formula to do our DP.
If we sort the students in increasing size, DP state is as follows: the number of students processed so far, the number of g groups which are currently “open” (have a minimum but no maximum), and the total imbalance k so far. For each student, we first add the appropriate value to the total imbalance (g times the distance to the previous student), and then either put the student in his own group (doesn’t change g), start a new group (increment g), add the student to one of the g groups (doesn’t change g), or close one of the g groups (decrement g).
Runtime: O(n2k)
[code]:
#include<bits/stdc++.h>using namespace std;typedef long long LL;const LL MOD = 1e9+7;int n,m,a[205];LL dp[2][205][1005];void sol(){ int i,j,k,k_,cr,nt; LL val; dp[0][0][0] = 1; for(i = 0;i < n;i++){ cr = i&1,nt = (i+1)&1; for(j = 0;j <= n;j++){ for(k = 0;k <= m;k++){ dp[nt][j][k] = 0; } } for(j = 0;j <= n;j++){ for(k = 0;k <= m;k++){ val = dp[cr][j][k]; k_ = k + j*(a[i+1]-a[i]); if(val==0||k_>m) continue; dp[nt][j+1][k_] = (dp[nt][j+1][k_]+val)%MOD; dp[nt][j][k_] = (dp[nt][j][k_]+(j+1)*val)%MOD; if(j) dp[nt][j-1][k_] = (dp[nt][j-1][k_]+j*val)%MOD; } } } LL ans = 0; for(k = 0;k <= m;k++) ans = (ans + dp[n&1][0][k])%MOD; printf("%I64d\n",(ans+MOD)%MOD);}int main(){ int i,j,k; scanf("%d%d",&n,&m); for(i = 1;i <= n;i++) scanf("%d",&a[i]); sort(a+1,a+n+1); sol(); return 0;}
- CodeForces 626F Group Projects(dp)
- Codeforces 626F Group Projects (DP)
- [DP] Codeforces #626F. Group Projects
- Codeforces 626F Group Projects 动态规划
- Codeforces Group Projects dp
- codeforces626F Group Projects(dp)
- 8VC Venture Cup 2016 - Elimination Round F. Group Projects(DP)
- 8VC Venture Cup 2016 - Elimination Round F. Group Projects(DP)★ ★
- Codeforces626F-Group Projects-神奇状态之DP
- 【Codeforces 500F】Dp
- codeforces 234F Fence (dp)
- codeforces 567F mausoleum dp
- Codeforces 234F (dp)
- 树形dp-CodeForces 581F
- codeforces 626F DP 如何设置状态,方便转移
- codeforces 120F Spiders 树形DP
- CodeForces 120F - 简单的树形DP
- CodeForces - 489F Special Matrices(DP)
- web前端工程师需要掌握哪些知识
- minidlna配置
- maven创建项目时出现错误:Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin
- Linux(CentOS6.x)下使用yum软件管理工具安装LNMP(Nginx+PHP+Mysql)环境并配置虚拟主机vhost
- 苹果系统升级 为 OS X EL Capitan 后安装 cocoapods
- Codeforces 626F Group Projects (DP)
- 修复miniblink 文件编码检测和退出内存泄漏的bug
- Dos脚本 给当前文件夹下指定的后缀文件们重命名(文件名追加制定内容)
- Middle-题目24:46. Permutations
- python学习网站
- 九度OJ 1052
- Android:TextView的垂直滚动效果,和上下滚动效果
- UE4 蓝图里添加Cpp文件,不在VS解决方案里显示的问题
- Middle-题目25:24. Swap Nodes in Pairs