zoukankan      html  css  js  c++  java
  • [无聊测试室] 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;
    }
    
  • 相关阅读:
    GUI基础学习
    常用类string的用法
    类。对象和包--补上周
    类.对象和包
    调用函数的注意事项
    函数的简单运用
    一维数组基础
    java中scanner类的用法
    数据库——DQL(语句查询)
    数据库——JDBC
  • 原文地址:https://www.cnblogs.com/DannyXu/p/12536347.html
Copyright © 2011-2022 走看看