154252025-02-19 14:31:38999Dinamitcpp17Elfogadva 50/5065ms1088 KiB
// Source: https://usaco.guide/general/io

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int inf=1e9;

int power(int a,int b){
    if(b==0)return 1;
    return power(a,b-1)*a;
}

signed main() {
    int n,m,mk;cin>>n>>m>>mk;
    vector<vector<int>> v(n+1,vector<int>(m+1));
    vector<vector<vector<int>>> dp(n+1,vector<vector<int>>(m+1,vector<int>(mk+1,inf)));
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            cin>>v[i][j];
            dp[i][j][0]=v[i][j];
        }
    }//k=0
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=m;j++){
            if(i>1&&j>1)
                dp[i][j][0]+=min(dp[i-1][j][0],dp[i][j-1][0]);
            else if(i==1&&j==1)continue;
            else if(i==1)dp[i][j][0]+=dp[i][j-1][0];
            else dp[i][j][0]+=dp[i-1][j][0];
        }
    }
    //k nem nulla de i vagy j 1
    for(int i = 1; i<=n;i++){
        for(int j = 1;j<=m;j++){
            for(int k = 1;k<=mk;k++){
                for(int k2=0;k2<=k;k2++){
                    if(!(i==1||j==1))continue;
                    if(i==1&&j==1)dp[i][j][k]=v[i][j]/power(2,k);
                    else if(i==1)dp[i][j][k]=min(dp[i][j][k],dp[i][j-1][k-k2]+v[i][j]/power(2,k2));
                    else dp[i][j][k]=min(dp[i][j][k],dp[i-1][j][k-k2]+v[i][j]/power(2,k2));    
                }
            }
        }
    }//altalanos keplet
    for(int i = 2; i<=n;i++){
        for(int j = 2;j<=m;j++){
            for(int k = 1;k<=mk;k++){
                for(int k2=0;k2<=k;k2++){
                    dp[i][j][k]=min({dp[i][j][k],dp[i][j-1][k-k2]+v[i][j]/power(2,k2),+dp[i-1][j][k-k2]+v[i][j]/power(2,k2)});
                }
            }
        }
    }/*debug kiiras
    for(int k=0;k<=mk;k++){
        cerr<<"ha k= "<<k<<endl;
        for(int i = 1;i<=n;i++){
            for(int j = 1;j<=m;j++){
                cerr<<dp[i][j][k]<<' ';
            }cerr<<endl;
        }cerr<<endl<<endl;
    }*/
    cout<<dp[n][m][mk]<<endl;    
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/065ms820 KiB
3Elfogadva2/22ms316 KiB
4Elfogadva2/22ms316 KiB
5Elfogadva3/32ms524 KiB
6Elfogadva3/32ms508 KiB
7Elfogadva2/263ms1020 KiB
8Elfogadva3/365ms1016 KiB
9Elfogadva2/24ms316 KiB
10Elfogadva2/24ms316 KiB
11Elfogadva3/34ms380 KiB
12Elfogadva3/34ms316 KiB
13Elfogadva2/217ms564 KiB
14Elfogadva3/317ms568 KiB
15Elfogadva2/265ms1020 KiB
16Elfogadva3/365ms1020 KiB
17Elfogadva2/265ms1012 KiB
18Elfogadva3/365ms1020 KiB
19Elfogadva2/265ms1088 KiB
20Elfogadva3/365ms1016 KiB
21Elfogadva2/265ms1020 KiB
22Elfogadva3/365ms1020 KiB