[无聊测试室] 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