80分wa求助

P1026 [NOIP2001 提高组] 统计单词个数

数组会越界,可以试试在s后先加一个‘0’在从字符串的第一位开始; 最后正着处理,不然会有重复覆盖了,还有就是等于号去不去的问题; ~~手动试试~~ AC代码: ```cpp #include<bits/stdc++.h> using namespace std; int p,k,n; int sum[205][205]; int dp[205][45]; map <int ,map<int ,int> > m;//map[i][j] 从i到j的单词数 string s; string ss[10]; int check(int l,int r){ string now=s.substr(l,r-l+1); for (int i=1;i<=n;i++){ if(now.find(ss[i])==0) return 1; } return 0; } int main(){ cin>>p>>k; s+='0'; for (int i=1;i<=p;i++){ string x; cin>>x; s+=x; } cin>>n; for (int i=1;i<=n;i++){ cin>>ss[i]; } for (int i=s.size()-1;i>=1;i--){ for (int j=i;j>=1;j--){ sum[j][i]=sum[j+1][i]; if(check(j,i)) sum[j][i]++; } } for(int i=1;i<=s.size()-1;i++) { dp[i][1]=sum[1][i]; dp[i][i]=dp[i-1][i-1]+sum[i][i]; } for (int i=1;i<=s.size()-1;i++){ for (int j=1;j<=k&&j<i;j++){ for (int k=j;k<i;k++){ dp[i][j]=max(dp[i][j],dp[k][j-1]+sum[k+1][i]); } } } cout<<dp[s.size()-1][k]; return 0; } ```
by aoprpl @ 2021-11-09 18:38:22


谢谢yuhao!!!
by q_james_c @ 2021-11-09 21:18:38


|