| ||||||||||
| 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 | |||||||||
Re:蜜汁wa,bool数组可过,int数组waIn Reply To:蜜汁wa,bool数组可过,int数组wa Posted by:1901213331 at 2019-12-28 14:17:25 > //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