P1504 积木城堡 有背包的影子

题意:给出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 }

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

时间: 2024-10-11 17:33:10

P1504 积木城堡 有背包的影子的相关文章

洛谷P1504 积木城堡

题目描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他

【dp】积木城堡

积木城堡 来源:vijos P1059 [问题描述]     XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则.     小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执

积木城堡

XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在要改造

积木城堡题解

Description - 问题描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度(明明是增加后宫人数 Σ( ° △ °\|\|\|)  ).为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了

[无聊测试室] T2 积木城堡

典型的背包问题.对于每组积木跑一个背包,然后全盘跑一遍找到最大的值使得每组积木都有相应的值 要存n组积木,由于n<=100,并且每组最多只有100个积木,每个最长不超过100,故用dp[100][10000]存储可以通过 #include <iostream> #include <algorithm> #include <cstring> using namespace std; const int MAXN = 1e2+5; int n,ans; bool dp

[tyvj1190]积木城堡

描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则.小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在要

vijosP1059 积木城堡

链接:https://vijos.org/p/1059 [思路] 01背包. 刚开始想麻烦了,想的是二分答案然后01背包判断是否可行,但是首先答案不满足单调性所以不能二分(这点以后做题之前一定要想清楚),其次如果从大到小枚举依次判定的话会TLE. 不得不说自己真是笨. 其实可以对每一组积木用一次01背包,用一个cnt记录满足该高度的城堡数目.然后从大到小检查如果为n输出即可.时间上是O(n^3). [代码] 1 #include<iostream> 2 #include<cstring&

18.03.20 vijos1059积木城堡

描述 XC的儿子小XC最喜欢玩的游戏用积木垒漂亮的城堡.城堡是用一些立方体的积木垒成的,城堡的每一层是一块积木.小XC是一个比他爸爸XC还聪明的孩子,他发现垒城堡的时候,如果下面的积木比上面的积木大,那么城堡便不容易倒.所以他在垒城堡的时候总是遵循这样的规则. 小XC想把自己垒的城堡送给幼儿园里漂亮的女孩子们,这样可以增加他的好感度.为了公平起见,他决定把送给每个女孩子一样高的城堡,这样可以避免女孩子们为了获得更漂亮的城堡而引起争执.可是他发现自己在垒城堡的时候并没有预先考虑到这一点.所以他现在

Soj题目分类

-----------------------------最优化问题------------------------------------- ----------------------常规动态规划  SOJ1162 I-Keyboard  SOJ1685 Chopsticks SOJ1679 Gangsters SOJ2096 Maximum Submatrix  SOJ2111 littleken bg SOJ2142 Cow Exhibition  SOJ2505 The County