比赛 |
NOIP2017普及组模拟赛Mike |
评测结果 |
AAAAAAAATT |
题目名称 |
气象牛 |
最终得分 |
80 |
用户昵称 |
路人甲 |
运行时间 |
3.063 s |
代码语言 |
C++ |
内存使用 |
5.37 MiB |
提交时间 |
2017-09-30 12:57:13 |
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int N=110;
int m[N],w[N][N],f[N][N],n,e;
int main() {
freopen("baric.in","r",stdin);
freopen("baric.out","w",stdout);
memset(f,0x3f3f3f3f,sizeof f);
memset(w,0,sizeof w);
scanf("%d%d",&n,&e);
for (int i=1; i<=n; ++i) scanf("%d",&m[i]);
for (int i=0; i<=n; ++i) {
for (int j=i+1; j<=n+1; ++j) {
for (int k=i+1; k<j; ++k) {
if (i==0) {
w[i][j]+=2*abs(m[j]-m[k]);
continue;
}
if (j==n+1) {
w[i][j]+=2*abs(m[i]-m[k]);
continue;
}
w[i][j]+=abs(2*m[k]-m[i]-m[j]);
}
}
}
f[0][1]=0;
w[0][n+1]=1e9;
for (int i=1; i<=n+1; ++i) {
for (int j=1; j<=i+1; ++j) {
for (int k=0; k<i; ++k) {
if (j-1<=k+1){
f[i][j]=min(f[i][j],f[k][j-1]+w[k][i]);
}
}
}
}
for (int i=1;i<=n+2;++i){
if (f[n+1][i]<=e){
printf("%d %d\n",i-2,f[n+1][i]);
return 0;
}
}
return 0;
}