1 solutions
-
1
#include<bits/stdc++.h> using namespace std; const int N=35,M=1e5+10; int a[N],f[M]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) //获取n个"abc"得到的权值 { cin>>a[i]; } int m; cin>>m; string s; cin>>s; s=" "+s; for(int i=1;i<=m;i++) { f[i]=f[i-1];//不选最后一个 for(int j=1;j<=n;j++) { if(i-3*j+1<=0) break;//越界 int l=i-3*j+1; if(s.substr(l,3)=="abc") //说明是当前可以选择 { f[i]=max(f[i],f[l]+a[j]); } else break;//说明不可以选择 } } cout<<f[m]<<endl; return 0; }
- 1
Information
- ID
- 2187
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 2
- Accepted
- 2
- Uploaded By