题目:

AC代码(DP转移方程部分看不懂):
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[3005],b[3005],qianzhui1[3005],qianzhui2[3005],dp[3005];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int g=1;g<=n;g++){
cin>>a[g]>>b[g];
qianzhui1[g]=qianzhui1[g-1]+a[g];
qianzhui2[g]=qianzhui2[g-1]+b[g];
}
memset(dp,127,sizeof(dp));
dp[0]=0;
for(int g=1;g<=n;g++){
for(int h=0;h+1<=g;h++){
dp[g]=min(dp[g],dp[h]+(qianzhui2[g]-qianzhui2[h])*qianzhui1[g]+m*(qianzhui2[n]-qianzhui2[h]));
}
}
cout<<dp[n]<<"\n";
return 0;
}