Pagini recente » Cod sursa (job #3206493) | Cod sursa (job #51406) | Cod sursa (job #2509020) | Cod sursa (job #146193) | Cod sursa (job #2930194)
#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];
}