2019牛客暑期多校训练营(第十场)J:Wood Processing

Wood Processing

题意:

n块木板拼成k块。拼接的方式是横向连接,纵向选择一个不高于最高高度的h使得所有块里面的高度相等。去掉的高度是浪费的东西,求最小的浪费量。

思路:

设dp[i][j]表示前i块木板拼接成j块的最少花费。

dp[i][j]=min(dp[k][j-1]+sum[i]-sum[k]-(sumw[i]-sumw[k])*h[k+1]) k从0枚举到i-1。考虑斜率优化。

代码:

#include
using namespace std;
typedef long long ll;
struct node{
	int w,h;
}a[5050];
int cmp(node x,node y){
	return x.h=(__int128)KY(k, i, que[tail - 1]) * KX(que[tail - 1], que[tail - 2])) 
				tail--;
            que[tail++] = i; 
		}
	}
	printf("%lld\n",dp[n][K]);
	return 0;
}

 

你可能感兴趣的:(DP,多校)