1 条题解

  • 0
    @ 2024-12-24 9:59:27

    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

    信息

    ID
    1501
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者