南陽理工OJ_題目546 Divideing Jewels

#include <iostream>

using namespace std;

int a[15];
int flag;
int aaa;
int sum;
int V;
int d[100010];

int main()
{
    int co = 0;
    aaa = 0;
    sum = 0;
    for(int i = 1; i <= 10; i++)
    {
        cin >> a[i];
        aaa += a[i];
        if(a[i] != 0)
            sum += a[i] * i;
    }
    while(aaa > 0)
    {
        co++;
        flag = 1;
        if(sum % 2)
            flag = 0;
        if(flag == 1)
        {
            for(int i = 1; i <= sum+1; i++)
                d[i] = -1 << 30;
            d[0] = 0;

            V = sum / 2;
            for(int i = 1; i <= 10; i++)
                for(int j = 1; j<= a[i]; j++)
                {
                    for(int k = V; k >= i; k--)
                        d[k] = d[k] > d[k-i] + i ? d[k] : d[k-i] + i;
                }

            if(d[V] > 0)
                flag = 1;
            else
                flag = 0;
        }
        if(flag == 1)
            cout << "#" << co << ":Can be divided.\n";
        else
            cout << "#" << co << ":Can't be divided.\n";
        aaa = 0;
        sum = 0;
        for(int i = 1; i <= 10; i++)
        {
            cin >> a[i];
            aaa += a[i];
            if(a[i] != 0)
                sum += a[i] * i;
        }
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章