1. 程式人生 > >線性DP P1269

線性DP P1269

return sizeof () emp ring sin 線性dp ... main

見註釋

註意理解sum表示含義以及f[i][j]和sum聯系

#include<cstdio>

#include<algorithm>

#include<cstring>

#define F(i,s,e) for(int i=s;i<=e;i++)

#define D(i,e,s) for(int i=e;i>=s;i--)

using namespace std;

int n,m;

int f[520][520];//zzh beser

int sum[520][520];

int h[520],temp;...

P1269

見註釋

註意理解sum表示含義以及f[i][j]和sum聯系

#include<cstdio>

#include<algorithm>

#include<cstring>

#define F(i,s,e) for(int i=s;i<=e;i++)

#define D(i,e,s) for(int i=e;i>=s;i--)

using namespace std;

int n,m;

int f[520][520];//zzh beser

int sum[520][520];

int h[520],temp;

int main()

{

scanf("%d%d",&n,&m);

F(i,1,n)

scanf("%d",&h[i]);

memset(f,10000,sizeof(f));

F(i,1,n)//求任意i~j區間內的不和諧度

{

F(j,i,n)

{

temp=0;

F(k,i,j)

temp+=h[k];

sum[i][j]=temp*(j-i+1-temp);

}

f[1][i]=sum[1][i];//到i的不和諧度就是1~i不和諧度

}

F(i,2,m)

F(j,i,n)

F(k,i-1,j)

f[i][j]=min(f[i][j],f[i-1][k]+sum[k+1][j]);

printf("%d\n",f[m][n]);

return 0;

}

線性DP P1269