侧边栏

AcWing-282 石子合并

链接:https://www.acwing.com/problem/content/284/

思路参考带环的石子合并,代码除了多了个循环一模一样

代码

 1 #include<bits/stdc++.h>
 2 #define inf 0x3f3f3f3f
 3 using namespace std;
 4 typedef long long ll;
 5 typedef long double ld;
 6 const int M = int(1e6)*2 + 5;
 7 const int mod = 10056;
 8 inline int lowbit(int x) {
 9     return x & (-x);
10 }
11 
12 int a[M];
13 int dp[1050][1050];
14 int sum[M];
15 int main()
16 {
17     memset(dp,inf,sizeof(dp));
18     
19     int n;cin>>n;
20     for(int i=1;i<=n;i++){
21         cin>>a[i];
22         sum[i]=sum[i-1]+a[i];
23         dp[i][i]=0;
24     }
25 
26     for(int len=2;len<=n;len++){
27         for(int l=1;l<=n-len+1;l++){
28             int r=l+len-1;
29             for(int k=l;k<r;k++){
30                 dp[l][r]=min(dp[l][r],dp[l][k]+dp[k+1][r]);
31             }
32             dp[l][r]+=(sum[r]-sum[l-1]);
33         }
34     }
35 
36     cout<<dp[1][n]<<endl;
37     return 0;
38 }

备注AcWing真的是一个很好的网站,吹爆

posted @ 2019-08-02 14:56  晴人  阅读(231)  评论(0编辑  收藏  举报