Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

One method

Posted by smilerxz at 2009-07-26 14:44:20 on Problem 1014 and last updated at 2009-07-26 14:46:17
In Reply To:0秒怎么过? Posted by:969869102 at 2009-07-25 20:34:34
// POJ1014
// T = O(sum), 'sum' is the summary of all values
// You can optimaze it, such as reduce the size of 'can' by checking in someway
#include <iostream>
#include <cstring>
using namespace std;

int a[7], s[7];
char can[120100];

bool solve() {
    s[0] = 0;
    for (int i = 1; i <= 6; i++) {
        s[i] = a[i] * i + s[i - 1]; // 's[i]' is the summary of the values of the marble(s) of which the value is no more than 'i'
    }
    if (s[6] % 2) return false;    
    memset(can, 0, sizeof(char) * (s[6] + 1));
    can[0] = 1;
    for (int i = 1; i <= 6; i++) {
        if (a[i]) {
            int ss = s[i] - s[i - 1];
            for (int k = s[i - 1] ; k >= 0; k--)
                if (can[k]) can[k + ss] = 2; // mark every end of loop by 2, the loop is on the number of marble(s) of the value 'i'
            for (int j = 0; j < i; j++) {
                int n = 0; // n is a loop counter, the loop is on the number of marble(s) of value i
                for (int k = s[i] - j; k >= 0; k -= i) { // attention!! here is 'k -= i', this is the the reason why 'for j = 0 to i'
                    if (can[k] == 2) {can[k] = 1; n = a[i];} // refresh the end of loop
                    else if (n > 0) {can[k] = 1; n--;} // loop
                }
            }
        } // end of 'if(a[i])'
    }
    return can[s[6] / 2];
}

int main() {
    int CASE = 0;
    for (;;) {
        for (int i = 1; i <= 6; i++)
            cin >> a[i];
        if (a[1] == 0 && a[2] == 0 && a[3] == 0 && a[4] == 0 && a[5] == 0 && a[6] == 0) break;
        printf("Collection #%d:\nCan%s be divided.\n\n", ++CASE, solve() ? "" : "'t");
    }
    return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator