震惊!题解居然也会WA!
查看原帖
震惊!题解居然也会WA!
1740609
lqy202400091楼主2025/7/29 22:13

这是我的代码:

#include<iostream>
#include<cstdio>
#include<deque>
using std::deque;
const int N = 5001;
deque<int> h;
deque<unsigned long> ans;
int c[N][N];
unsigned long dp[N][N];
int n;
unsigned long m;
int main()
{
    scanf("%d", &n);
    ans.resize(n + 1), h.resize(n + 1);
    ans[1] = 0;
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &m);
        h[i] = m;
    }
    for (int i = 1; i < n; ++i)
        for (int j = i + 1; j <= n; ++j)
        {
            if (h[j] > h[i])
                c[i][j] = h[j] - h[i];
            else c[i][j] = h[i] - h[j];
        }
    for (int len = 2; len <= n; ++len)
    {
        ans[len] = 1e5;
        for (int i = 1, j = len; j <= n; ++i, ++j)
        {
            dp[i][j] = c[i][j] + dp[i + 1][j - 1];
            if (dp[i][j] < ans[len])
                ans[len] = dp[i][j];
        }
    }
    ans.erase(ans.begin());
    
    for (auto c : ans)
    {
        m = c;
        printf("%ld ", m);
    }
    
}

它WA了好几个点。 然后我找了一下和我思路相似的题解:

#include<bits/stdc++.h>
using namespace std;
int n,j[5010],f[5010][5010];

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		scanf("%d",&j[i]);
	}
	for(int i=0;i<n;i++){
		int ans=INT_MAX;
		for(int l=1;l<=n;l++){
			int r=i+l;
			if(r>n)break;
			f[l][r]=f[l+1][r-1]+abs(j[r]-j[l]);
			/*f_{l,r}=f_{i+1,r-1}+|j_r-j_l|*/
			ans=min(ans,f[l][r]);//长度固定,起点不固定 
		}
		cout<<ans<<' ';
	}
	return 0;
}

然后它也WA了,WA的点还和我的一样!
大佬们,这个思路哪错了呢? Please help me!!!

2025/7/29 22:13
加载中...