Luogu 2737 [USACO4.1]麥香牛塊Beef McNuggets
阿新 • • 發佈:2018-09-01
amp one close print span eve splay play 技術分享
NOIP2017 D1T1 的結論,兩個數$a, b$所不能表示出的最大的數為$a * b - a - b$。
聽了好幾遍證明我還是不會
註意到本題中給出的數都非常小,所以最大不能表示出的數$\leq 256 * 256 - 256 * 2 = 65024$。
那麽直接用這個$65024$作為背包容量跑完全背包就好了。
時間復雜度$O(maxV * n)$。
Code:
#include <cstdio> using namespace std; const int N = 15; const int M = 65030; int n, a[N]; boolView Codef[M]; inline void read(int &X) { X = 0; char ch = 0; int op = 1; for(; ch > ‘9‘|| ch < ‘0‘; ch = getchar()) if(ch == ‘-‘) op = -1; for(; ch >= ‘0‘ && ch <= ‘9‘; ch = getchar()) X = (X << 3) + (X << 1) + ch - 48; X *= op; }int main() { read(n); for(int i = 1; i <= n; i++) read(a[i]); f[0] = 1; for(int i = 0; i < M; i++) for(int j = 1; j <= n; j++) if(i - a[j] >= 0) f[i] |= f[i - a[j]]; int ans = 0; for(int i = 65029; i >= 0; i--) if(!f[i]) { ans= i; break; } if(ans > 65024) ans = 0; printf("%d\n", ans); return 0; }
Luogu 2737 [USACO4.1]麥香牛塊Beef McNuggets