Cod sursa(job #2930194)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 27 octombrie 2022 18:28:05
Problema A+B Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("adunare.in");
ofstream fout("adunare.out");

const int dim=1e5+10,inf=1e9;

int n,k,v[dim];
int dp[dim][109];//dp[i][j]=suma maxima impartind primele i elemente in k secvente
int maxim[dim][109];//maximul din secventa j

signed main(){
        fin>>n>>k;
        fout<<n+k;
        return 0;
    for(int i=1;i<=n;i++){
        fin>>v[i];
    }
    for(int i=0;i<=n;i++){
        for(int j=0;j<=k;j++){
            dp[i][j]=inf;
        }
    }
    dp[1][1]=v[1];
    maxim[1][1]=v[1];
    for(int i=2;i<=n;i++){
        for(int j=1;j<=k;j++){
            if(v[i]>maxim[i-1][j]){//plasam pe v[i] in ultima secventa
                if(dp[i][j]>dp[i-1][j]-maxim[i-1][j]+v[i]){
                    dp[i][j]=dp[i-1][j]-maxim[i-1][j]+v[i];
                    maxim[i][j]=v[i];
                }
            }else{
                if(dp[i][j]>dp[i-1][j]){
                    dp[i][j]=dp[i-1][j];
                    maxim[i][j]=maxim[i-1][j];
                }
            }
            if(dp[i][j]>dp[i-1][j-1]+v[i]){//cream o secventa noua
                dp[i][j]=dp[i-1][j-1]+v[i];
                maxim[i][j]=v[i];
            }
        }
    }
    fout<<dp[n][k];
}