您的位置:首页 > 其它

vojos 1059 积木城堡 经典动态

2012-09-01 21:33 267 查看
题目意思就是小xc想送给幼儿园女孩子们每人一座城堡,这些城堡都是用立方体的积木搭成,现在为了不出现偏袒那个女生的现象,必须要求送给每个女孩子的城堡的告诉都一样高,那么小xc想出来的办法就是在抽掉其中部分城堡当中的积木,尽量让所有的城堡能达到最大公共高度。

那么其实转念一想就很简单,其实就是把其中每个塔的积木全部当做是物品,求这些物品尽量能占得的最大空间,然后求所有城堡的能到达的最大公共高度。

View Code

 #include<iostream>
 #include<stdio.h>
 using namespace std;
 int dp[110][10000],Count[10000];
 int main()
 {
    int n,height,Minvalue,sum;
    while(scanf("%d",&n)!=EOF)
    {
           Minvalue=100000;
           memset(dp,0,sizeof(dp));
           memset(Count,0,sizeof(Count));
           for(int i=0;i<n;i++)
           {
               dp[i][0]=1,height=1,sum=0;
               while(1)
               {
                  scanf("%d",&height);
                  if(height==-1)break;
                  sum+=height;
                  for(int j=sum;j>=height;j--)
                  {
                      if(dp[i][j-height]==1&&dp[i][j]==0)
                      {
                           dp[i][j]=1;
                           Count[j]++;
                      }
                  }
               }
               Minvalue=sum<Minvalue?sum:Minvalue;
           }
           int answer;
           for(answer=Minvalue;answer>0;answer--)
           if(Count[answer]==n)break;
           printf("%d\n",answer);
    }
    return 0;
 }
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: