码迷,mamicode.com
首页 > 其他好文 > 详细

lll

时间:2019-10-03 17:48:34      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:bit   为什么   ++   size   sum   else   for   def   理解   

#include <bits/stdc++.h>
#define MAXN 10005
#define MAXM 10005
using namespace std;
int n,m,i,j,sum[MAXN],f[MAXN][MAXM],pos[MAXN],w[MAXN][MAXM],s[MAXN][MAXM];
int main(){
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
scanf("%d",&pos[i]);
sum[i]=sum[i-1]+pos[i]-pos[1];
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
{
if(i==j) w[i][j]=0;
else{
int k=(i+j)/2;
w[i][j]=sum[j]-sum[k]+(j-k)*(pos[k]-pos[1])+sum[k]-sum[i]+(k-i)*(pos[i]-pos[1]);
}
}
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
s[i][j]=i-1; //为什么是i-1理解不深刻 不是i
for(i=1;i<=n;i++)
s[i][m+1]=i-1;
memset(f,0x3f,sizeof f);
f[0][0]=0;
f[1][1]=0;
for(i=2;i<=n;i++)
{
for(j=min(i,m);j>=1;j--)
{
for(int k=s[i][j+1];k>=s[i-1][j];k--)
{
if(f[i][j]>f[i][k-1]+w[k][i])
{
f[i][j]=f[i][k]+w[k][i];
s[i][j]=k;
}
}
}
}
}

lll

标签:bit   为什么   ++   size   sum   else   for   def   理解   

原文地址:https://www.cnblogs.com/Lamboofhome/p/11620232.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!