kuangbin专题
遇见一个题目,顺便写了一下最近新学的语法。
#include <functional>
#include <iostream>
#include <vector>
using namespace std;
using i64 = long long;
const i64 inf = 1e18;
int main(){
int n;cin>>n;
vector<int> a(n+1),b(n+1);
for(int i=1;i<=n;i++)
cin>>a[i],b[i]=a[i];
function<i64(bool(*)(int,int))> f=[&](bool (*cmp)(int,int))->i64{
sort(b.begin()+1,b.end(),cmp);
vector<vector<i64>> dp(n+1,vector<i64>(n+1,inf));
dp[0][0]=0;
for(int i=1;i<=n;i++){
i64 v=dp[i-1][0];
for(int j=1;j<=n;j++)
v=min(v,dp[i-1][j]),
dp[i][j]=v+abs(a[i]-b[j]);
}
return *min_element(dp[n].begin(),dp[n].end());
};
cout<<min(f([](int a,int b)->bool{return a<b;}),f([](int a,int b)->bool{return a>b;})) << endl;
}
其中functioal库可以方便我们内嵌函数。
[]()可以让我们随意写入函数,cmp作为函数指针进行一个判断。