http://mp.weixin.qq.com/s?__biz=MzI3OTIwMzc3Mw==&mid=2649582164&idx=1&sn=cd5885adb3cbe9a5d6a5e16ca12f5bb7&scene=23&srcid=0517Xvk13GzEX1PsySmM1xDV#rd
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int n;
multiset<int> s;
void EXEC() {
ll ans = 0;
scanf("%d", &n);
s.clear();
for (int i = 1; i <= n; ++i) {
int t;
scanf("%d", &t);
if (!s.empty() && *s.begin() < t) {
ans += t - *s.begin();
s.erase(s.begin());
s.insert(t);
s.insert(t);
} else {
s.insert(t);
}
}
cout << ans << endl;
}
int main() {
int t;
scanf("%d", &t);
for (int i = 1; i <= t; ++i) {
printf("Case #%d: ", i);
EXEC();
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
using namespace std;
typedef long long ll;
typedef double dd;
const int size = 110000;
int a[size],tag,n,vis[size];
int main () {
int t;
cin>>t;
for(int ca=1;ca<=t;ca++){
cin>>n;
int top=0;
for(int i=0;i<n;i++)cin>>a[i];
sort(a,a+n);
vis[0]=ca;
int tmp=0;
int p=0;
while(p<n&&a[p]<0){
tmp-=a[p];p++;
}
int ans=0;
if(p==n)goto ex;
for(int i=p;i<n-1;i++)
{
for(int j=top;j>=0;j--)
if(vis[j]==ca)vis[j+a[i]]=ca;
top+=a[i];
}
ans=top;
for(int i=0;i<=top;i++)
if(vis[i]==ca)
ans=min(ans,abs(top-i-i));
tmp+=a[n-1]-ans;
ex:;
printf("Case #%d: %d\n",ca,tmp);
}
return 0;
}