58分的蒟蒻求助,在2,3,4,10,12wa了

P3146 [USACO16OPEN] 248 G

@[JoshuaZheng](/user/654164) 给你一组hack: 输入 ``` 3 2 1 2 ``` 输出 ``` 2 ``` 你的输出是 3
by ssxvngn @ 2022-05-17 21:42:18


@[JoshuaZheng](/user/654164) 你的DP应该是i~j全部合成的,就不能用` dp[i][j] = max(dp[i][j], max(dp[i][k], dp[k + 1][j]));`,这样不是完全合并。 改了一下: ```cpp #include<bits/stdc++.h> using namespace std; #define fr(i, a, b) for (int i = a; i <= b; i++) typedef long long ll; typedef unsigned long long ull; typedef double dou; typedef pair<int, int> pii; const int maxn=250; const ll inf = 1e9 + 5; const ll mod = 1e9 + 7; int num[maxn]; int dp[maxn][maxn],ans=-1;//ans记录 void solve(){ int n; cin >> n; for (int i = 1; i <= n;i++) { cin >> num[i]; dp[i][i] = num[i]; ans=max(ans,num[i]);//记录 } for (int len = 1; len < n;len++) { for (int i = 1; i+len <= n; i++) { int j = i + len; for (int k = i; k < i + len&&k<j;k++) { //cout << k + 1 << ' ' << j << ' ' << dp[i][k] << ' ' << dp[k + 1][j] << endl; if(dp[i][k]==dp[k+1][j]){ dp[i][j] = max(dp[i][j], dp[i][k] + 1); ans=max(dp[i][j],ans); }//只要完全合并 } } } cout << ans << endl; } int main() { ios::sync_with_stdio(false); int t=1; //cin >> t; //t = 1; while(t--) { solve(); } system("pause"); return 0; } ```
by ssxvngn @ 2022-05-17 21:45:12


@[一个pupil](/user/500205) 哦哦哦,好的好的,非常感谢!!!
by JoshuaZheng @ 2022-05-18 20:26:35


@[lhzawa](/user/500205) 谢谢帮助,我也卡这里了
by incomprehen @ 2022-11-08 16:41:33


|