全re求助
查看原帖
全re求助
750598
Prophet_Inkpigeon楼主2023/8/23 19:11
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll read()
{
	short f=1;ll x=0;char s=getchar();
	while(s<48||s>57){f=s=='-'?-1:1;s=getchar();}
	while(s>=48&&s<=57){x=x*10+s-48;s=getchar();}
	return x*f;
}
int a[52],b[52],s[52],f[52][52][2];
int main()
{
	int n=read(),c=read();
	for(int i=1;i<=n;++i)
	{
		a[i]=read();b[i]=read();
		s[i]=s[i-1]+b[i];
	}
	memset(f,127,sizeof(f));
	f[c][c][0]=0;f[c][c][1]=0;
	for(int i=2;i<=n;++i)
	for(int j=1,k=i+j-1;k<=n;++j)
	{
		f[j][k][0]=
		min(f[j+1][k][0]+(a[j+1]-a[j])*(s[j]+s[n]-s[k]),
		f[j+1][k][1]+(a[k]-a[j])*(s[j]+s[n]-s[k]));
		f[j][k][1]=
		min(f[j][k-1][0]+(a[k]-a[j])*(s[j-1]+s[n]-s[k-1]),
		f[j][k-1][1]+(a[k]-a[k-1])*(s[j-1]+s[n]-s[k-1]));
	}
	printf("%d",min(f[1][n][0],f[1][n][1]));
	return 0;
}
2023/8/23 19:11
加载中...