求助大佬帮改代码,思路是区间DP,样例输出是78.0,谢谢
#include<bits/stdc++.h>
using namespace std;
long long ton,k,n,w[1010],s[1010],zz[1010][1010];
double t[1010],tt[1010][1010],f[1010][1010];
int main()
{
cin>>ton>>k>>n;
for(int i=1;i<=n;i++)
{
cin>>w[i]>>s[i];
t[i] = 60.0*k/s[i];
}
for(int i=1;i<=n;i++)
{
long long zq=0;
tt[i][i]=t[i];
zq=w[i];
for(int j=i+1;j<=n;j++)
{
zq+=w[j];
zz[i][j]=zq;
tt[i][j] = max( t[j] , tt[i][j-1] );
}
}
// for(int i=1;i<=n;i++)
// {
// for(int j=i;j<=n;j++)
// {
// //cout<<i<<" "<<j<<" "<<zz[i][j]<<" "<<tt[i][j]<<"\n";
// }
// }
memset(f,0x7f,sizeof(f));
for(int i=1;i<=n;i++)
f[i][i] = t[i];
for(int wi=2;wi<=n;wi++)
{
for(int i=1;i<=n-wi+1;i++)
{
int j=i+wi-1;
if( zz[i][j] < ton )
{
f[i][j] = tt[i][j];
continue;
}
for(int k=i;k<j;k++)
{
double q1=1e9,q2=1e9;
if( zz[i][k] < ton )
q1 = tt[i][k];
if( zz[k+1][j] < ton )
q2 = tt[k+1][j];
//cout<<i<<" "<<j<<" "<<k<<" "<<q1<<" "<<q2<<" ";
q1=min( f[i][k] , q1 );
q2=min( f[k+1][j] , q2 );
//cout<<q1<<" "<<q2<<"\n";
f[i][j] = min( q1 + q2 , f[i][j] );
}
}
}
// for(int i=1;i<=n;i++)
// {
// for(int j=i;j<=n;j++)
// {
// cout<<i<<" "<<j<<" "<<f[i][j]<<"\n";
// }
// }
int ans=f[1][n]*100;
ans/=10;
double ans2 = 1.0*ans/10;
printf("%.1lf",ans2);
return 0;
}