ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

装箱问题

装箱问题

装箱问题【加强版 】题解

应该没有人会关心我这个唐题,但是我还是写一篇题解

首先我造的数据除了数据范围外,其实数据都还挺水的,奈何造多了 ,能卡掉一些小贪心还是可以的

我要介绍一位你们很熟悉的老朋友:bitset

想到了吧,dp状态设置为\(dp_i表示是否可以组装出这个体积\),显而易见的,\(dp_0 = 1\),那么就有这个唐龙伪转移方程了:

\(对于每个体积w,有dp = dp|dp<<w\)

还是很简单的,复杂度\(O(nv/64)\)

code:

#include<bits/stdc++.h>
#define gc() getchar()
#define pc(x) putchar(x) 
using namespace std;
using ll = long long;
inline ll read(){ll res = 0;ll flag = 1;char ch = gc();while(!isdigit(ch)){if(ch == '-')  {flag = -flag;}ch = gc();}while(isdigit(ch)){res = res*10+ch-48;ch = gc();}return flag*res;}
void write(ll x){if(x < 0){x = -x;pc('-');}if(x > 9){write(x/10);}pc(x%10+48);}int const maxv = 1e6+5;
bitset<maxv> b;int main(){int v = read();int n = read();b[0] = 1;while(n--){int w = read();b |= b<<w;}for(int i = v; i >= 0; --i){if(b[i]){write(v-i),pc('\n');return 0;}}return 0;
} 
返回列表