標籤:inline rap 代碼簡潔 ring 代碼 cond ems sizeof ace
用pair寫dp, 有種新鮮的感覺.
就是狀壓dp, pair第一維記錄用了幾個電梯, 第二維記錄還剩多少空間, 取min轉移即可.
用pair主要是為了使代碼簡潔.
#include <cstdio>#include <cstring>#include <cassert>#include <iostream>#include <algorithm>using namespace std;typedef pair<int, int> P;const int MAXN = 18 + 1;inline int read(){ char ch = getchar(); int x = 0; while(!isdigit(ch)) ch = getchar(); while(isdigit(ch)) x = x * 10 + ch - '0', ch = getchar(); return x;}int N, W;int c[MAXN];P f[(1 << 18)];int main(){ cin>>N>>W; for(int i = 0; i < N; i++) c[i] = read(); memset(f, 0x3f, sizeof(f)), f[0] = P(0, 0); for(int i = 0; i < (1 << N); i++) { for(int j = 0; j < N; j++) if(!(i & (1 << j))) f[i | (1 << j)] = min(f[i | (1 << j)], f[i].second + c[j] <= W ? P(f[i].first, f[i].second + c[j]) : P(f[i].first + 1, c[j])); } printf("%d\n", f[(1 << N) - 1].first + (f[(1 << N) - 1].second != 0)); return 0;}
P3052 [USACO12MAR]摩天大廣告裡的奶牛Cows in a Skyscraper