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 ;
}