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

谁来证明一下,次数 k 和 k%8 效果是一样的。

Posted by ohthree at 2004-12-05 12:23:47 on Problem 1014
加上了这个优化,就过了,没想通如何证明。
代码如下:
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main(int argc,char* argv[])
{
	int i,j,sum;
	bool flag;
	for(int count=1;;count++)
	{
		flag = false;
		vector<int> datapool;
		sum = 0;
		for(i=1;i<=6;i++)
		{
			cin>>j;
			flag = flag || j!=0 ;

			j = j % 8; //这里!
			for(;j>0;j--)
			{
				datapool.push_back(i);
				sum += i;
			}

		}
		if(!flag)
			break;
		int half = sum /2;
		if(sum % 2 != 0)
		{
			flag = false;
		}
		else
		{
			do
			{
				int partsum = 0;
				for(i=0;i<datapool.size();i++)
				{
					if(partsum==half)
					{
						flag = true;
						break;
					}
					else
					{
						partsum += datapool[i];
						if(partsum>half)
						{
							flag = false;
							break;
						}
						else
							continue;
					}
				}
				if(flag)
					break;
			}while(next_permutation(datapool.begin(),datapool.end()));
		}
		if(flag)
		{
			cout<<"Collection #"<<count<<":"<<endl;
			cout<<"Can be divided."<<endl<<endl;
		}
		else
		{
			cout<<"Collection #"<<count<<":"<<endl;
			cout<<"Can't be divided."<<endl<<endl;
		}
	}
}

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