Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
蜜汁wa,bool数组可过,int数组wa//ac代码 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #define M 100000+10 #define N 105 #define INF 0x3f3f3f3f #pragma warning(disable:4996) using namespace std; int n, m; bool f[M]; int a[N], c[N]; int sum; void read() { for (int i = 0; i < n; i++) scanf("%d", &a[i]); for (int i = 0; i < n; i++) scanf("%d", &c[i]); } void completepack(int t) { for (int i = t; i <= m; i++) { f[i] |= f[i - t]; } } void zeroonepack(int t) { for (int i = m; i >= t; i--) { f[i] |= f[i - t]; } } void solve() { memset(f, false, M * sizeof(bool)); f[0] = true; sum = 0; for (int i = 0; i < n; i++) { if (a[i] * c[i] >= m) completepack(a[i]); else { int k = 1; int num = c[i]; while (k < num) { zeroonepack(k * a[i]); num -= k; k *= 2; } zeroonepack(num * a[i]); } } for (int i = 1; i <= m; i++) if (f[i] == 1) sum++; } int main() { while (scanf("%d %d", &n, &m) && (n != 0 || m != 0)) { read(); solve(); printf("%d\n", sum); } return 0; } //wa代码 #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #define M 100000+10 #define N 105 #define INF 0x3f3f3f3f #pragma warning(disable:4996) using namespace std; int n, m; int f[M]; int a[N], c[N]; int sum; void read() { for (int i = 0; i < n; i++) scanf("%d", &a[i]); for (int i = 0; i < n; i++) scanf("%d", &c[i]); } void completepack(int t) { for (int i = t; i <= m; i++) { f[i] = max(f[i - t],f[i]); } } void zeroonepack(int t) { for (int i = m; i >= t; i--) { f[i] = max(f[i - t], f[i]); } } void solve() { memset(f, 0, M * sizeof(int)); f[0] = 1; sum = 0; for (int i = 0; i < n; i++) { if (a[i] * c[i] >= m) completepack(a[i]); else { int k = 1; int num = c[i]; while (k < num) { zeroonepack(k * a[i]); num -= k; k *= 2; } zeroonepack(num * a[i]); } } for (int i = 1; i <= m; i++) if (f[i] == 1) sum++; } int main() { while (scanf("%d %d", &n, &m) && (n != 0 || m != 0)) { read(); solve(); printf("%d\n", sum); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator