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 (
1≤T≤10
)
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.( 2≤k,n≤100000
)
The second line has n - 1 integers, the distance of adjacent domino d, 1≤d≤100000![]()
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.( 2≤k,n≤100000
The second line has n - 1 integers, the distance of adjacent domino d, 1≤d≤100000
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); } }