제출 #1363366

#제출 시각아이디문제언어결과실행 시간메모리
1363366gvancakK개의 묶음 (IZhO14_blocks)C++20
53 / 100
0 ms580 KiB
#include <bits/stdc++.h>
#define f first
#define s second
#define pb push_back
#define mp make_pair
#define ll long long
using namespace std;
const ll N=105,INF=1e9;
ll a[N],b[N],y,z,x,n,q,mx,mn,k,ans,ind;
pair <ll,ll> dp[N][N];
bool ok,okk;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    
    cin >> n >> q;
    for (int i=1; i<=n; i++) cin >> a[i];
    
    for (int i=0; i<=n; i++){
    	for (int k=1; k<=n; k++){
    		dp[i][k]=mp(INF,INF);
		}
	}
	mx=a[1];
	for (int i=1; i<=n; i++) dp[i][1]=mp(mx,mx),mx=max(mx,a[i+1]); mx=0;
	dp[0][0]=mp(0,0);
	for (int i=1; i<=n; i++){
		for (int k=2; k<=i; k++){
		
			if (a[i]>dp[i-1][k].s){
				if (dp[i][k].f>dp[i-1][k].f-dp[i-1][k].s+a[i])
				dp[i][k]=mp(dp[i-1][k].f-dp[i-1][k].s+a[i],a[i]);
			}
			else{
			if (dp[i][k].f>dp[i-1][k].f){
				dp[i][k]=dp[i-1][k];
			}
			}
			mx=a[i];
			for (int j=i-1; j>=0; j--){
				x=dp[j][k-1].f+mx;
				if (x<dp[i][k].f){
					dp[i][k]=mp(x,mx);
				}
				mx=max(mx,a[j]);
			}	
			//	cout<<i<<" "<<k<<" "<<dp[i][k].f<<" "<<dp[i][k].s<<endl;
		}
	}
	cout<<dp[n][q].f<<endl;
    

}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…