得分250。。我真是个250。。。

犯了一些很搞笑的错。。

 

【2016-09-27-DP小练】

f[i][j][k]表示第i个苹果,现在在j这个位置,还能用k次转移。

用i去更新i+1。

时间复杂度1000*2*30;

转移方程有个地方减一写错位了。。这么明显的错竟然没有看见。。50分TAT

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 
 7 const int N=1100,M=50;
 8 int n,K,f[N][3][M],t[N];
 9 
10 int maxx(int x,int y){return x>y ? x:y;}
11 void g(int &x,int y){x=maxx(x,y);}
12 
13 int main()
14 {
15     // freopen("a.in","r",stdin);
16     freopen("bcatch.in","r",stdin);
17     freopen("bcatch.out","w",stdout);
18     scanf("%d%d",&n,&K);
19     for(int i=1;i<=n;i++) scanf("%d",&t[i]),t[i]--;
20     memset(f,-63,sizeof(f));
21     f[0][0][K]=0;
22     for(int i=0;i<n;i++)
23     {
24         int now=t[i+1];
25         for(int k=0;k<=K;k++)
26         {
27             g(f[i+1][now][k],f[i][now][k]+1);
28             if(k>=1) g(f[i+1][now][k-1],f[i][1-now][k]+1);
29             g(f[i+1][1-now][k],f[i][1-now][k]);
30             if(k>=1) g(f[i+1][1-now][k-1],f[i][1-now][k]);
31         }
32     }
33     int ans=0;
34     for(int k=0;k<=K;k++) ans=maxx(ans,maxx(f[n][0][k],f[n][1][k]));
35     printf("%d\n",ans);
36     return 0;
37 }
T1

相关文章:

  • 2021-05-19
  • 2021-07-18
  • 2022-01-04
  • 2022-12-23
  • 2021-09-28
  • 2022-12-23
  • 2021-07-04
猜你喜欢
  • 2021-11-14
  • 2021-12-28
  • 2022-12-23
  • 2021-07-13
相关资源
相似解决方案