ps : rp 巨差 , 调试半天 … 写得太受挫了
初始化是不是写得太麻烦了呢?
1: #include <iostream>
2:
3: using namespace std;
4: int f[1005],ans[1005][35][2];
5: int main()
6: {
7: int n,m;
8: cin>>n>>m;
9: int a=0;
10: for(int i=0;i<n;i++){
11: cin>>f[i];
12: if(f[i]==1)
13: {
14: a++;
15: ans[i][0][0]=a;
16: ans[i][0][1]=0;
17: }
18: else
19: {
20: ans[i][0][0]=a;
21: ans[i][0][1]=0;
22: }
23: }
24: if(f[0]==1)
25: for(int i=1;i<=m;i++)
26: {
27: ans[0][i][0]=1;
28: ans[0][i][1]=1;
29: }
30: else
31: for(int i=1;i<=m;i++)
32: {
33: ans[0][i][0]=0;
34: ans[0][i][1]=1;
35: }
36: for(int i=1;i<n;i++)
37: for(int j=1;j<=m;j++)
38: {
39: for(int k=0;k<=1;k++)
40: {
41: int d=0;
42: ans[i][j][k]=ans[i-1][j][k];
43: if(f[i]-1==k) d=1;
44: ans[i][j][k]=max(ans[i][j][k]+d,ans[i-1][j-1][(k+1)%2]+d);
45: }
46: }
47: cout<<max(ans[n-1][m][0],ans[n-1][m][1])<<endl;
48: return 0;
49: }