关于 wyh的问题的疑惑
求大佬解答,为什么我这串代码不加abs全对,加了全错,保证加了abs里的值全为正数?
代码如下:
#include<bits/stdc++.h>
#define all(x) x.begin(),x.end()
#define int long long
using namespace std;
const int N=1e3+5,INF=0x3f3f3f3fLL,M=2e4+5,mod=3600;
int n,st; int f[N][N][2],d[N],w[N],s[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
while(cin>>n)
{
cin>>st;
for(int i=1;i<=n;i++)
{
cin>>d[i]>>w[i];
s[i]=s[i-1]+w[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
f[i][j][0]=f[i][j][1]=INF;
}
}
f[st][st][0]=f[st][st][1]=0;
for(int len=2;len<=n;len++)
{
for(int i=1;i+len-1<=n;i++)
{
int j=i+len-1;
f[i][j][0]=min(f[i+1][j][0]+abs(d[i+1]-d[i])*(s[n]-s[j]+s[i]),f[i+1][j][1]+abs(d[j]-d[i])*(s[n]-s[j]+s[i]));
f[i][j][1]=min(f[i][j-1][1]+abs(d[j]-d[j-1])*(s[n]-s[j-1]+s[i-1]),f[i][j-1][0]+abs(d[j]-d[i])*(s[n]-s[j-1]+s[i-1]));
}
}
cout<<min(f[1][n][0],f[1][n][1])<<endl;
}
return 0;
}