Submission #39627

#TimeUsernameProblemLanguageResultExecution timeMemory
39627HassoonyRetro (COCI17_retro)C++14
2 / 100
500 ms117360 KiB
#include<bits/stdc++.h> #define F first #define S second using namespace std; typedef long long ll; const ll mod=1e9+7; const int inf=(1<<30); const int MX=309; char a[MX][MX]; int n,m,dp[MX][MX][MX],open1,add; int DP(int x,int y,int open){ if(y<=0||y>m||open<0)return -inf; if(x==0){ if(open)return -inf; return 0; } if(a[x][y]=='*'){ if(open)return -inf; return 0; } int &ret=dp[x][y][open];if(ret!=-1)return ret; vector<pair<char,int> >v; v.push_back({a[x-1][y-1],y-1}); v.push_back({a[x-1][y],y}); v.push_back({a[x-1][y+1],y+1}); sort(v.begin(),v.end()); for(auto pp:v){ if(pp.second<=0||pp.second>m)continue; open1=open,add=0; if(pp.first=='(')open1++; if(pp.first==')')open1--,add=2; if((pp.first=='('||pp.first==')')&&open1>=0)ret=max(ret,DP(x-1,pp.second,open1)+add); ret=max(ret,DP(x-1,pp.second,open)); } return ret; } void FDP(int x,int y,int open){ if(y<=0||y>m||open<0)return; if(x==0)return; if(a[x][y]=='*')return; int &ret=dp[x][y][open]; vector<pair<char,int> >v; v.push_back({a[x-1][y-1],y-1}); v.push_back({a[x-1][y],y}); v.push_back({a[x-1][y+1],y+1}); sort(v.begin(),v.end()); for(auto pp:v){ open1=open,add=0; if(pp.first=='(')open1++; if(pp.first==')')open1--,add=2; if(pp.first=='('||pp.first==')')if(ret==DP(x-1,pp.second,open1)+add){ printf("%c",pp.first); FDP(x-1,pp.second,open1); return; } if(ret==DP(x-1,pp.second,open)){ FDP(x-1,pp.second,open); return; } } } int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } memset(dp,-1,sizeof(dp)); int j; for(int i=1;i<=m;i++){ if(a[n][i]=='M')j=i; } cout<<DP(n,j,0)<<endl; FDP(n,j,0); puts(""); }

Compilation message (stderr)

retro.cpp: In function 'int main()':
retro.cpp:63:24: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d",&n,&m);
                        ^
retro.cpp:74:19: warning: 'j' may be used uninitialized in this function [-Wmaybe-uninitialized]
     cout<<DP(n,j,0)<<endl;
                   ^
#Verdict Execution timeMemoryGrader output
Fetching results...