/ SeriousOJ /

Record Detail

Accepted


  
# Status Time Cost Memory Cost
#1 Accepted 1ms 532.0 KiB
#2 Accepted 1ms 532.0 KiB
#3 Accepted 1ms 532.0 KiB
#4 Accepted 1ms 320.0 KiB
#5 Accepted 1ms 404.0 KiB
#6 Accepted 1ms 532.0 KiB
#7 Accepted 2ms 556.0 KiB
#8 Accepted 3ms 532.0 KiB
#9 Accepted 3ms 532.0 KiB
#10 Accepted 3ms 532.0 KiB
#11 Accepted 3ms 532.0 KiB
#12 Accepted 4ms 532.0 KiB
#13 Accepted 4ms 532.0 KiB
#14 Accepted 4ms 532.0 KiB
#15 Accepted 4ms 532.0 KiB
#16 Accepted 3ms 532.0 KiB
#17 Accepted 1ms 532.0 KiB
#18 Accepted 1ms 532.0 KiB
#19 Accepted 1ms 532.0 KiB
#20 Accepted 1ms 320.0 KiB
#21 Accepted 1ms 368.0 KiB
#22 Accepted 1ms 404.0 KiB
#23 Accepted 1ms 444.0 KiB
#24 Accepted 1ms 484.0 KiB
#25 Accepted 1ms 320.0 KiB
#26 Accepted 1ms 532.0 KiB
#27 Accepted 1ms 484.0 KiB
#28 Accepted 1ms 484.0 KiB
#29 Accepted 1ms 532.0 KiB
#30 Accepted 1ms 532.0 KiB
#31 Accepted 1ms 532.0 KiB
#32 Accepted 1ms 536.0 KiB
#33 Accepted 1ms 532.0 KiB
#34 Accepted 4ms 532.0 KiB
#35 Accepted 4ms 532.0 KiB
#36 Accepted 4ms 532.0 KiB
#37 Accepted 4ms 532.0 KiB
#38 Accepted 4ms 532.0 KiB
#39 Accepted 4ms 532.0 KiB
#40 Accepted 4ms 536.0 KiB
#41 Accepted 4ms 532.0 KiB
#42 Accepted 4ms 536.0 KiB
#43 Accepted 3ms 764.0 KiB
#44 Accepted 3ms 536.0 KiB
#45 Accepted 3ms 532.0 KiB
#46 Accepted 3ms 532.0 KiB
#47 Accepted 3ms 532.0 KiB
#48 Accepted 4ms 532.0 KiB
#49 Accepted 4ms 532.0 KiB
#50 Accepted 2ms 536.0 KiB
#51 Accepted 1ms 532.0 KiB
#52 Accepted 1ms 532.0 KiB
#53 Accepted 1ms 516.0 KiB
#54 Accepted 1ms 344.0 KiB
#55 Accepted 1ms 540.0 KiB
#56 Accepted 1ms 324.0 KiB
#57 Accepted 1ms 560.0 KiB
#58 Accepted 1ms 532.0 KiB
#59 Accepted 1ms 436.0 KiB
#60 Accepted 1ms 532.0 KiB
#61 Accepted 1ms 536.0 KiB
#62 Accepted 1ms 432.0 KiB
#63 Accepted 1ms 532.0 KiB
#64 Accepted 1ms 532.0 KiB
#65 Accepted 1ms 532.0 KiB
#66 Accepted 1ms 532.0 KiB
#67 Accepted 1ms 532.0 KiB
#68 Accepted 1ms 536.0 KiB
#69 Accepted 1ms 532.0 KiB
#70 Accepted 1ms 532.0 KiB
#71 Accepted 1ms 532.0 KiB
#72 Accepted 1ms 532.0 KiB
#73 Accepted 1ms 532.0 KiB
#74 Accepted 1ms 336.0 KiB
#75 Accepted 1ms 532.0 KiB
#76 Accepted 4ms 320.0 KiB
#77 Accepted 5ms 364.0 KiB
#78 Accepted 4ms 532.0 KiB
#79 Accepted 4ms 532.0 KiB
#80 Accepted 4ms 532.0 KiB
#81 Accepted 4ms 532.0 KiB
#82 Accepted 4ms 532.0 KiB
#83 Accepted 2ms 532.0 KiB
#84 Accepted 2ms 564.0 KiB
#85 Accepted 2ms 532.0 KiB
#86 Accepted 2ms 532.0 KiB
#87 Accepted 4ms 532.0 KiB
#88 Accepted 4ms 532.0 KiB
#89 Accepted 4ms 532.0 KiB
#90 Accepted 2ms 532.0 KiB
#91 Accepted 1ms 536.0 KiB
#92 Accepted 1ms 532.0 KiB
#93 Accepted 1ms 364.0 KiB
#94 Accepted 1ms 508.0 KiB
#95 Accepted 1ms 344.0 KiB
#96 Accepted 1ms 532.0 KiB
#97 Accepted 1ms 532.0 KiB
#98 Accepted 1ms 536.0 KiB
#99 Accepted 1ms 560.0 KiB
#100 Accepted 1ms 532.0 KiB

Code

/*
 *   Copyright (c) 2024 Emon Thakur
 *   All rights reserved.
 */
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
#define endl '\n'

void solve()
{
    // string filename = "input"+to_string(ii)+".txt";
    // int nn = filename.size();
    // char fname[nn];
    // for(int i=0;i<nn;i++) fname[i] = filename[i];
    // freopen(fname,"r",stdin);
    // ofstream file("output"+to_string(ii)+".txt");
    
    //int t; cin >> t;
    int n,m; cin >> n >> m;
    ll x,y; cin >> x >> y;
    char a[n][m];
    pair<ll,ll> dp[n][m];
    //vector<vector<int>> hasobs(n,vector<int>(m,0));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++) 
        {
            cin >> a[i][j];
            //if(a[i][j]=='#') hasobs[i][j] = 1;
            dp[i][j] = {1e18,1e18};
        }
    }
    // for(int i=0;i<n;i++)
    // {
    //     for(int j=1;j<m;j++) hasobs[i][j] = hasobs[i][j] + hasobs[i][j-1];
    // }
    dp[0][0] = {0,0};
    for(int j=1;j<m;j++) 
    {
        if(a[0][j]=='#') break;
        dp[0][j].first = dp[0][j-1].first + x;
        dp[0][j].second = dp[0][j-1].first + y;
    }
    for(ll i=1;i<n;i++)
    {
        for(ll j=0;j<m;j++)
        {
            if(a[i][j]=='#') continue;
            dp[i][j].first = min({dp[i][j].first , dp[i-1][j].second+y , (j==0)?(ll)1e18 : dp[i][j-1].first+x });
            dp[i][j].second = min({dp[i][j].second , (j==0)?(ll)1e18:dp[i][j-1].first+y , dp[i-1][j].second+x});
            ll mn = 1e18;
            for(ll k=j+1;k<m;k++)
            {
                if(a[i][k]=='#') break;
                mn = min(mn , dp[i-1][k].second + y + (k-j-1)*x);
            }
            dp[i][j].first = min(dp[i][j].first , mn + x);
            dp[i][j].second = min(dp[i][j].second , mn+y);
        }
    }
    // for(int i=0;i<n;i++)
    // {
    //     for(int j=0;j<m;j++) 
    //     {
    //         (dp[i][j].first==1e18)? cout<<"inf ": cout<<dp[i][j].first<<" ";
    //         (dp[i][j].second==1e18)? cout<<"inf  ": cout<<dp[i][j].second<<"  ";
    //     }cout<<endl;
    // }

    // edge case m==1 or n==1
    ll ans = min(dp[n-1][m-2].first , dp[n-2][m-1].second);
    (ans==1e18)? cout<<-1<<endl: cout<<ans<<endl;
}
int main()
{
    ios::sync_with_stdio(false); cin.tie(nullptr);
    //for(int i=1;i<100;i++) solve(i);
    int t; cin >> t; while(t--) solve();
}

Information

Submit By
Type
Submission
Problem
P1156 Low cost water management
Language
C++17 (G++ 13.2.0)
Submit At
2024-12-28 21:46:05
Judged At
2024-12-28 21:46:05
Judged By
Score
100
Total Time
5ms
Peak Memory
764.0 KiB