[无聊测试室] 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[MAXN][MAXN*MAXN];
inline void update(int curr, int num){
  for (int i=MAXN*MAXN-2;i>=0;i--){//倒叙跑背包
    if (i-num<0) return;
    if (dp[curr][i-num]) dp[curr][i] = true;
  }
}
inline void solve(){
  cin >> n;
  memset(dp,0,sizeof(dp));
  for (int i=0;i<n;i++){
    int c; cin >> c;
    dp[i][0] = true;//拿0个肯定可以
    while(c!=-1){
      update(i,c);
      cin >> c;
    }
  }
  for (int i=0;i<MAXN*MAXN;i++){
    for (int j=0;j<n;j++) if (!dp[j][i]) goto abcd;
    ans = i;
    abcd:;
  }//从大到小会快,不过无所谓了...
  cout << ans;
}
int main(){
  solve();
  return 0;
}

原文地址:https://www.cnblogs.com/DannyXu/p/12536347.html

时间: 2024-11-02 09:35:15

[无聊测试室] T2 积木城堡的相关文章

积木城堡题解

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

【dp】积木城堡

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

积木城堡

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

[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&

洛谷P1504 积木城堡

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

18.03.20 vijos1059积木城堡

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

P1504 积木城堡 有背包的影子

题意:给出n堆木块,每一堆从大到小堆砌,是一个非绝对递减序列 每一堆的高度就所有木块大小的总和,让我们将这n堆木块中取出一些,使n堆木块高度一样高 求出最高的高度(只能取出,不能增加) 思路:根据题目数据,最大的高度是10000,我们就像操作01背包那样,从大到小枚举一遍, 然后求出这n堆木块,都能到达些什么高度,用vis保存 最后再从大到小枚举一遍,所有的堆都能到达某一高度,便是答案 1 #include<bits/stdc++.h> 2 using namespace std; 3 int

无聊测试赛题解

无聊测试赛题解 首先膜拜_Zhumingrui大佬获得1000分的好成绩 T1 凯撒密码 T2 积木城堡 T3 出租车拼车 T4 汽车拉力比赛 T5 最佳课题选择 T6 排行榜 T7 豪华游轮 T8 佳佳的魔法药水 T9 矩阵覆盖 待填充 T10 所陀门王的宝藏 T11 老C的键盘 待填充 T12 道路 待填充 原文地址:https://www.cnblogs.com/DannyXu/p/12536283.html