dp!
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct
{
int t,d;
}Cow;
int*flag;
__int64 min(__int64 a,__int64 b)
{
return a>b?b:a;
}
int sum(Cow*head,int N,int i,int time){
if(i==N)
return 0;
else if(flag[i]) return sum(head+1,N,i+1,time);
else return sum(head+1,N,i+1,time)+time*2*head->d;
}
__int64 dp(Cow* t,int n,int N)
{
int i;
__int64 temp=(__int64)1<<62;
if (n==0)return 0;
else
{
for(i=0;i<N;i++)
if(!flag[i])
{
flag[i]=1;
tttt[ti]=i;
ti++;
temp=min(temp,dp(t,n-1,N)+sum(t,N,0,t[i].t));
flag[i]=0;
ti--;
}
return temp;
}
}
int main()
{
int N,i=0;
Cow*head;
fscanf(f,"%d",&N);
head=(Cow*)malloc((N)*sizeof(Cow));
flag=(int*)malloc(N*sizeof(int));
memset(flag,0,sizeof(int)*N);
while(i!=N)
{
scanf("%d %d",&head[i].t,&head[i].d);
i++;
}
printf("%I64d",dp(head,N,N));
free(head);
free(flag);
return 0;
}