求查错
查看原帖
求查错
648756
Shadow_Lord楼主2022/9/29 19:44
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<queue>
#include<algorithm>
using namespace std;
inline int read()
{
    int s=0,w=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9')s=s*10+(ch-'0'),ch=getchar();
    return s*w;
}
int n,c,h[60],co[60],ans,f[60][60][2],s[60];
int min(int a,int b)
{
   return a<b?a:b;
}
int max(int a,int b)
{
   return a>b?a:b;
}
int main()
{
	n=read();
	c=read();
	for(int i=1;i<=n;i++)
	{
		h[i]=read();
		co[i]=read();
		s[i]=s[i-1]+co[i];
	}
	memset(f,0x3f3f,sizeof(f));
	f[c][c][0]=0;
	f[c][c][1]=0;
	for(int l=2;l<=n;l++)
	{
		for(int i=1;i+l-1<=n;i++)
		{
			int j=i+l-1;
			f[i][j][0]=min(f[i+1][j][0]+(h[i+1]-h[i])*(s[n]-s[j]+s[i]),
			f[i+1][j][1]+(h[j]-h[i])*(s[n]-s[j]+s[i]));
			
			f[i][j][1]=min(f[i][j-1][1]+(h[j]-h[j-1])+(s[n]-s[j-1]+s[i-1]),
			f[i][j-1][0]+(h[j]-h[i])*(s[n]-s[j-1]+s[i-1]));
			
		}
	}
    ans=min(f[1][n][0],f[1][n][1]);
	cout<<ans;
	return 0;
}
2022/9/29 19:44
加载中...