Hackrank Equal DP
Christy is interning at HackerRank. One day she has to distribute some chocolates to her colleagues. She is biased towards her friends and may have distributed the chocolates unequally. One of the program managers gets to know this and orders Christy to make sure everyone gets equal number of chocolates.
But to make things difficult for the intern, she is ordered to equalize the number of chocolates for every colleague in the following manner,
For every operation, she can choose one of her colleagues and can do one of the three things.
- She can give one chocolate to every colleague other than chosen one.
- She can give two chocolates to every colleague other than chosen one.
- She can give five chocolates to every colleague other than chosen one.
Calculate minimum number of such operations needed to ensure that every colleague has the same number of chocolates.
Input Format
First line contains an integer denoting the number of testcases. testcases follow.
Each testcase has lines. First line of each testcase contains an integer denoting the number of colleagues. Second line contains N space separated integers denoting the current number of chocolates each colleague has.
Constraints
Number of initial chocolates each colleague has <
Output Format
lines, each containing the minimum number of operations needed to make sure all colleagues have the same number of chocolates.
Sample Input
1
4
2 2 3 7
Sample Output
2
Explanation
1st operation: Christy increases all elements by 1 except 3rd one
2 2 3 7 -> 3 3 3 8
2nd operation: Christy increases all element by 5 except last one
3 3 3 8 -> 8 8 8 8
#include<bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
const long long INF = 1e18+1LL;
const double Pi = acos(-1.0);
const int N = 6e3+, M = 1e3+, mod = ,inf = 2e9; int dp[N][N],a[];
int main() {
for(int i = ;i <= ; ++i)
for(int j = ; j <= ; ++j) dp[i][j] = inf; for(int i = ; i <= ; ++i) {
dp[i][i] = ;
for(int j = ; j < i; ++j) {
if(i->=j)
dp[i][j] = min(dp[i-][j]+,dp[i][j]);
if(i->=j)
dp[i][j] = min(dp[i-][j]+,dp[i][j]);
if(i->=j)
dp[i][j] = min(dp[i-][j]+,dp[i][j]);
}
}
int T,n;
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
int mi = inf;
for(int i = ; i <= n; ++i) scanf("%d",&a[i]),mi = min(mi,a[i]+);
int ans = ;
for(int i = ; i <= n; ++i) {
ans += dp[a[i]+][mi];
}
for(int i = ; i <= mi; ++i) {
int sum = ;
for(int j = ; j <= n; ++j) {
sum += dp[a[j]+][i];
}
ans = min(ans,sum);
}
printf("%d\n",ans);
}
return ;
}
Hackrank Equal DP的更多相关文章
- Codeforces 1188D Make Equal DP
题意:给你个序列,你可以给某个数加上2的幂次,问最少多少次可以让所有的数相等. 思路(官方题解):我们先给序列排序,假设bit(c)为c的二进制数中1的个数,假设所有的数最后都成为了x, 显然x &g ...
- Hackrank Candies DP
题目链接:传送门 题意: n个学生站一行,老师给每个学生发至少一个糖 相邻学生,a[i] > a[i-1] 的话,那么右边学生的糖一定要发得比左边学生的糖多 问你满足条件这个老师总共最少的发多少 ...
- HDU 1217 Arbitrage(Floyd的应用)
给出一些国家之间的汇率,看看能否从中发现某些肮脏的......朋友交易. 这是Floyd的应用,dp思想,每次都选取最大值,最后看看自己跟自己的.....交易是否大于一.... #include< ...
- HDU 6595 Everything Is Generated In Equal Probability (期望dp,线性推导)
Everything Is Generated In Equal Probability \[ Time Limit: 1000 ms\quad Memory Limit: 131072 kB \] ...
- UvaLive6661 Equal Sum Sets dfs或dp
UvaLive6661 PDF题目 题意:让你用1~n中k个不同的数组成s,求有多少种组法. 题解: DFS或者DP或打表. 1.DFS 由于数据范围很小,直接dfs每种组法统计个数即可. //#pr ...
- Codeforces 622C Not Equal on a Segment 【线段树 Or DP】
题目链接: http://codeforces.com/problemset/problem/622/C 题意: 给定序列,若干查询,每个查询给定区间和t,输出区间内任意一个不等于t的元素的位置. 分 ...
- Hackrank Kingdom Division 树形DP
题目链接:传送门 题意: 给你一棵树,n个点 每个点可以染成红色和蓝色 但是红色的点与其相邻的点中必须有红色节点,蓝色也是 问你有多少种染色的方案 题解: 树形dp 先转化为有根树,取1为根 设定dp ...
- [UVALive 6661 Equal Sum Sets] (dfs 或 dp)
题意: 求从不超过 N 的正整数其中选取 K 个不同的数字,组成和为 S 的方法数. 1 <= N <= 20 1 <= K<= 10 1 <= S <= 15 ...
- 【HDOJ6595】Everything Is Generated In Equal Probability(期望DP)
题意:给定一个N,随机从[1,N]里产生一个n, 然后随机产生一个n个数的全排列,求出n的逆序数对的数量并累加ans, 然后随机地取出这个全排列中的一个子序列,重复这个过程,直到为空,求ans在模99 ...
随机推荐
- Python运维工程师
1.单引号,双引号,三引号的区别. 2.Python里面如何实现tuple和List的转换. 3.Python的参数传递是值传递还是引用传递,举例说明Python函数参数传递的几种形式,并说明函数传参 ...
- c和c++如何把一个整数转化为string
c和c++如何把一个整数转化为string C++: 一.string转int的方式 采用最原始的string, 然后按照十进制的特点进行算术运算得到int,但是这种方式太麻烦,这里不介绍了. 采用标 ...
- Java基础学习总结(93)——Java编码规范之代码性能及惯例
1.避免使用包装类构造函数 按照SUN公司的说明,使用自动装箱或静态工厂方法比使用new一个对象快3到4倍,该规则可以用在valueOf或其它静态工厂的调用中(如:Short.Integer, Lon ...
- SQL Server 上关于同一张表里的三级联动
或许这并不能叫做三级联动,三级联动是很容易实现的东西,有明确的层级关系,一般分开三张表存储.我在公司的项目里遇到这样一个问题,同一张表里面,有分公司,客户,项目3种关系,他们的层级关系是这样:分公司- ...
- idea没有tomcatserver问题解决
https://www.cnblogs.com/a8457013/p/7795987.html 在配置tomcate时有时候按照网上说的找不到tomcat Server,不知不觉花了很长时间这时我们在 ...
- XTU 二分图和网络流 练习题 J. Drainage Ditches
J. Drainage Ditches Time Limit: 1000ms Memory Limit: 32768KB 64-bit integer IO format: %I64d Ja ...
- python004 Python3 解释器
Python3 解释器Linux/Unix的系统上,一般默认的 python 版本为 2.x,我们可以将 python3.x 安装在 /usr/local/python3 目录中.安装完成后,我们可以 ...
- Android渐变GradientDrawable叠加组合环ring
Android渐变GradientDrawable叠加组合环ring 写一个Android环形shape之间的叠加组合形成新图像的例子.代码: <?xml version="1. ...
- HUD-1559 最大子矩阵,dp模拟
最大子矩阵 ...
- 可拔插的 IOC 容器
可拔插的 IOC 容器 于是我打算自己实现一个这样的 bean 容器. 但在实现之前又想到一个 feature: 不如把实现 bean 容器的方案交给使用者选择,可以选择使用 bean 容器,也可以就 ...