2 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=1010; int T,W; int a[N]; int f[1010][35][3]; int dfs(int t,int moved,int p) { if(t==T+1) return 0;//时间已经用完 if(f[t][moved][p]==-1) { int now=(a[t]==p)?1:0;//判断当前时刻是否可以获得苹果 int best=now+dfs(t+1,moved,p);//不移动 if(moved<W) //还可以移动 { best=max(best,now+dfs(t+1,moved+1,3-p)); } f[t][moved][p]=best; } return f[t][moved][p]; } int main() { cin>>T>>W; memset(f,-1,sizeof f); for(int i=1;i<=T;i++) { cin>>a[i]; } cout<<dfs(0,0,1); return 0; } -
0
#include<bits/stdc++.h> using namespace std; const int N=1010,M=40,L=3; int f[N][M][L],s[N]; int main() { int T,W; cin>>T>>W; for(int i=1;i<=T;i++) { cin>>s[i]; } memset(f,-0x3f,sizeof f); f[0][0][1]=0; for(int i=1;i<=T;i++) { for(int j=0;j<=W;j++) { for(int k=1;k<=2;k++) { int t=1+(j%2); f[i][j][k]=f[i-1][j][k]; if(i>0 and j>0) { f[i][j][k]=max(f[i][j][k],f[i-1][j-1][3-k]); } if(t==s[i]) { f[i][j][k]++; } } } } cout<<max(f[T][W][1],f[T][W][2]); return 0; }
- 1
Information
- ID
- 3038
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 10
- Accepted
- 3
- Uploaded By