我nm^3怎么过了???
查看原帖
我nm^3怎么过了???
294562
EDqwq楼主2022/8/17 18:32
#include<bits/stdc++.h>

#define int long long
#define mem(x,y) memset(x,y,sizeof(x))
#define si set <node> :: iterator

using namespace std;

int read(){
   int s = 0,w = 1;
   char ch = getchar();
   while(ch < '0' || ch > '9'){if(ch == '-')w = -1;ch = getchar();}
   while(ch >= '0' && ch <= '9')s = s * 10 + ch - '0',ch = getchar();
   return s * w;
}

int n,m;
int a[1000010];
int pre[1000010];
int dp[300][300][300];
int ans = 1e18;

signed main(){
    cin>>n>>m;
    for(int i = 1;i <= n;i ++)a[i] = read();
    for(int i = 1;i <= n;i ++)pre[i] = pre[i - 1] + a[i];
    mem(dp,0x3f);
    for(int i = 0;i <= m;i ++)dp[0][0][i] = 0;
    for(int i = 0;i <= n - 1;i ++){
        for(int j = 0;j <= m;j ++){
            for(int k = 0;k <= j;k ++){
                int v = m - j;
                if(i != 0)v = min(v,k);
                for(int l = 0;l <= v;l ++){
                    dp[i + 1][j + l][l] = min(dp[i + 1][j + l][l],dp[i][j][k] + abs(j + l - pre[i + 1]));
                }
            }
        }
    }
    for(int i = 0;i <= m;i ++)ans = min(ans,dp[n][m][i]);
    cout<<ans;
}

没有任何优化,妥妥的 O(n×m3)O(n \times m^3) ,怎么就过了

2022/8/17 18:32
加载中...