1 solutions

  • 0
    @ 2025-11-5 15:36:23

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define N 100000+10
    int dp[N][3], n;
    char mp[N][3],s[N];
    void work(int prex, int prey, int nowx, int nowy){
    	if(mp[nowx][nowy] == '#')
    	{
    		dp[nowx][nowy] = 0;
    		return ;
    	}
    	dp[nowx][nowy] = max(dp[nowx][nowy], dp[prex][prey]+mp[nowx][nowy]-'0');
    }
    int main(){
    	//freopen("date.in","r+",stdin);
    	//freopen("date.out","w+",stdout);
    	int i, j;
    	while(~scanf("%d",&n)){
    		for(i = 2; i >= 0; i--)
    		{
    			scanf("%s",s);
    			for(j = 0; j < n; j++){mp[j][i] = s[j];if(mp[j][i]=='.')mp[j][i]='0';}
    		}
    		memset(dp, 0, sizeof dp);
    		for(i = 1; i < n; i++)
    		{
    			if(mp[i-1][0]!='#')
    				work(i-1,0, i,0);
    			if(i-4>=0)//落地转移
    			{
    				if(mp[i-4][0]!='#'&&mp[i-3][1]!='#'&&mp[i-2][2]!='#'&&mp[i-1][1]!='#')
    					work(i-1,1, i,0);
    			}
    
    			if(mp[i-1][0]!='#')//起跳转移
    				work(i-1,0, i,1);
    			if(i-3>=0)//落地转移
    			{
    				if(mp[i-3][0]!='#'&&mp[i-2][1]!='#'&&mp[i-1][2]!='#')
    					work(i-1,2, i,1);
    			}
    
    			if(i-2>=0)
    			{
    				if(mp[i-2][0]!='#'&&mp[i-1][1]!='#')
    					work(i-1,1, i,2);
    			}
    		}
    		int ans = 0;
    		for(i = 0; i < 3; i++) ans = max(ans, dp[n-1][i]);
    		printf("%d\n", ans);
    	}
    	return 0;
    }
    
    
    • 1

    Information

    ID
    16948
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By