| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
三维纯暴力无脑解法#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
using namespace std;
#define MAX_N 10000
int dp[MAX_N][35][2];
int N,W;
int a[1005];
void solve(){
memset(dp,-1,sizeof(dp));
dp[N+1][W][0]=dp[N+1][W][1]=0;
for(int i=N;i>=1;--i){
for(int j=0;j<=W;++j){
if(a[i]==1){
//dp[i][j][0]=max(dp[i+1][j+1][1],dp[i+1][j][0])+1;
if(dp[i+1][j+1][1]>=0)
dp[i][j][0]=max(dp[i][j][0],dp[i+1][j+1][1]);
if(dp[i+1][j][0]>=0)
dp[i][j][0]=max(dp[i][j][0],dp[i+1][j][0]);
if(dp[i][j][0]>=0) dp[i][j][0]++;
//dp[i][j][1]=max(dp[i+1][j][1],dp[i+1][j+1][0]);
if(dp[i+1][j][1]>=0)
dp[i][j][1]=max(dp[i][j][1],dp[i+1][j][1]);
if(dp[i+1][j+1][0]>=0)
dp[i][j][1]=max(dp[i][j][1],dp[i+1][j+1][0]);
}
else{
// dp[i][j][1]=max(dp[i+1][j+1][0],dp[i+1][j][1])+1;
if(dp[i+1][j+1][0]>=0)
dp[i][j][1]=max(dp[i][j][1],dp[i+1][j+1][0]);
if(dp[i+1][j][1]>=0)
dp[i][j][1]=max(dp[i][j][1],dp[i+1][j][1]);
if(dp[i][j][1]>=0) dp[i][j][1]++;
// dp[i][j][0]=max(dp[i+1][j+1][1],dp[i+1][j][0]);
if(dp[i+1][j+1][1]>=0)
dp[i][j][0]=max(dp[i][j][0],dp[i+1][j+1][1]);
if(dp[i+1][j][0]>=0)
dp[i][j][0]=max(dp[i][j][0],dp[i+1][j][0]);
}
}
}
}
int main(){
scanf("%d%d",&N,&W);
for(int i=1;i<=N;++i) scanf("%d",a+i);
solve();
int ans=0;
for(int j=W;j>=0;--j){
ans=max(ans,dp[1][j][0]);
ans=max(ans,dp[1][j][1]);
}
printf("%d\n",ans);
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator