石子合并题解 区间动态规划(dp)
2026-07-09 10:30:54
发布于:广东
11阅读
0回复
0点赞
非常简单
正确代码:
#include<bits/stdc++.h>
using namespace std;
int n,a[305],s[305],dp[305][305];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
s[i]=s[i-1]+a[i];
}
for(int l=2;l<=n;l++){
for(int i=1,j=l;j<=n;i++,j++){
dp[i][j]=1e9;
for(int k=i;k<j;k++){
int nx=dp[i][k] + dp[k+1][j] + s[j]-s[i-1];
dp[i][j]=min(dp[i][j],nx);
}
}
}
cout<<dp[1][n];
return 0;
}
错误代码:
有胆量的可以试试:
你会发现样例是对的……但:
#include<bits/stdc++.h>
using namespace std;
int n,a[305],b[305];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
b[i] = b[i-1]+a[i];
}
cout<<b[n]*2;
return 0;
}
如果你运行此错误代码:

如果你提交:

……
这里空空如也







有帮助,赞一个