HDOJ-BestCoder Round #85 【5777 domino】

domino

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 874    Accepted Submission(s): 435


Problem Description
Little White plays a game.There are n pieces of dominoes on the table in a row. He can choose a domino which hasn't fall down for at most k times, let it fall to the left or right. When a domino is toppled, it will knock down the erect domino. On the assumption that all of the tiles are fallen in the end, he can set the height of all dominoes, but he wants to minimize the sum of all dominoes height. The height of every domino is an integer and at least 1.
 

Input
The first line of input is an integer T ( 1T10 )
There are two lines of each test case.
The first line has two integer n and k, respectively domino number and the number of opportunities.( 2k,n100000 )
The second line has n - 1 integers, the distance of adjacent domino d, 1d100000
 

Output
For each testcase, output of a line, the smallest sum of all dominoes height
 

Sample Input
  
  
1 4 2 2 3 4
 

Sample Output
  
  
9
昨天就想起来了,一直没有时间写题解,现在废话不多说(想了2天才懂),你会看到网上的 很多题解,就是直接按照间距从小到大排序,然后让前n-k个元素相加,然后加n即可  对于网上的题解你们可能会有很多困惑,跟着我的思路走 ,一共有k次机会,当用第一次的机会的 时候,到哪个地方才能用第2个机会呢,那就是下一个间距是所有间距最大的时候,就会使用第 2次机会,一次类推,然后是间距第二大,第三大,第4大,如果还不懂,那就好好想一想 我已经尽力了 
#include<cstdio>
#include<algorithm>
using namespace std;
#define LL long long 
LL a[200000];

int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		LL n,k,i;
		scanf("%lld%lld",&n,&k);
		for(i=1;i<n;++i)
			scanf("%lld",&a[i]);
		sort(a+1,a+n);
		LL sum=0;
		for(i=1;i<=n-k;++i)
			sum+=a[i];
		printf("%lld\n",sum+n); 
	} 
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值