zstu 2552 马棚问题

做出 zstu2555后 就不成问题啦。。
虽然怀疑学校的oj时间是不是坏掉了。。

#include<stdio.h>
#include<string.h>
struct colors
{
    int black;
    int white;
}mycolor[510];
int dp[510][510];
int min(int g,int h)
{
    return g>h?h:g;
}
int main()
{
    int n,k;
    while(scanf("%d%d",&n,&k)!=EOF)
    {
        int color;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&color);
            if(color==1)
            {
                mycolor[i].black=mycolor[i-1].black+1;
                mycolor[i].white=mycolor[i-1].white;
            }
            else
            {
                mycolor[i].white=mycolor[i-1].white+1;
                mycolor[i].black=mycolor[i-1].black;
            }
        }
        memset(dp,0x3f3f3f3f,sizeof(dp));
        for(int i=1;i<=n;i++)
            dp[1][i]=mycolor[i].black*mycolor[i].white;
        for(int i=2;i<=k;i++)
        {
            for(int j=i;j<=n;j++)
            {
                for(int k=i-1;k<j;k++)
                    dp[i][j]=min(dp[i][j],dp[i-1][k]+(mycolor[j].black-mycolor[k].black)*(mycolor[j].white-mycolor[k].white));
            }
        }
        printf("%d\n",dp[k][n]);
    }
    return 0;
}

你可能感兴趣的:(dp,zstu)