这是一道DP题
但是用爆搜也能过
跑的还挺快的
就是直接暴力搜索
跑到边界去关灯
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<ctime>
#include<cstdlib>
#include<climits>
#include<queue>
#include<vector>
#include<map>
#define LL long long
#define MOD 1000000007
using namespace std;
int ans=9999999,p[55],w[55],tot,n,c;
bool vis[55];
void dfs(int pos,int cost,int cnt,int all)
{
if(cost>ans) return;
if(cnt>=n)
{
ans=cost;
return;
}
int l,r;
l=pos;r=pos;
while(vis[l]&&l>=1) l--;
while(vis[r]&&r<=n) r++;
if(l>=1)
{
vis[l]=1;
dfs(l,cost+all*(p[pos]-p[l]),cnt+1,all-w[l]);
vis[l]=0;
}
if(r<=n)
{
vis[r]=1;
dfs(r,cost+all*(p[r]-p[pos]),cnt+1,all-w[r]);
vis[r]=0;
}
}
int main()
{
int i;
scanf("%d%d",&n,&c);
for(i=1;i<=n;i++)
{
scanf("%d%d",&p[i],&w[i]);
tot+=w[i];
}
tot-=w[c];
vis[c]=1;
dfs(c,0,1,tot);
printf("%d",ans);
return 0;
}