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

P1504 积木城堡 有背包的影子

时间:2020-04-06 20:21:22      阅读:64      评论:0      收藏:0      [点我收藏+]

标签:hid   高度   一个   答案   style   break   最大   i++   序列   

题意:给出n堆木块,每一堆从大到小堆砌,是一个非绝对递减序列

     每一堆的高度就所有木块大小的总和,让我们将这n堆木块中取出一些,使n堆木块高度一样高

       求出最高的高度(只能取出,不能增加)

思路:根据题目数据,最大的高度是10000,我们就像操作01背包那样,从大到小枚举一遍,

    然后求出这n堆木块,都能到达些什么高度,用vis保存

      最后再从大到小枚举一遍,所有的堆都能到达某一高度,便是答案

技术图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int dp[105][10010];
 4 int vis[10010];
 5 int main()
 6 {
 7     int n;
 8     scanf("%d",&n);
 9     for(int i=1;i<=n;i++){
10         int tmp;
11         dp[i][0]=1;
12         while(scanf("%d",&tmp)!=EOF){
13             if(tmp==-1) break;
14             for(int j=10010;j>=0;j--){
15                 if(dp[i][j]){
16                     dp[i][j+tmp]=1;
17                 }
18             }
19         }
20         for(int j=0;j<=10010;j++) if(dp[i][j]) vis[j]++;
21     }
22     for(int j=10010;j>=0;j--){
23         if(vis[j]==n){
24             printf("%d\n",j);
25             break;
26         }
27     }
28     return 0;
29 }
View Code

 

P1504 积木城堡 有背包的影子

标签:hid   高度   一个   答案   style   break   最大   i++   序列   

原文地址:https://www.cnblogs.com/pangbi/p/12643926.html

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