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

谁能帮我找错?

Posted by pangmm at 2010-08-18 15:57:19 on Problem 1276
题目里的数据能过,可总是WA,提交很多次了


#define max(a,b) a > b ? a : b
#include <cstdio>
#include <cstdlib>
#include <memory.h>
int f[100002];
int cash, kinds; 
int cost[12], weight[12], num[12];
int maxk(int n)
{
	int k = 1;
	int count = 0;
	while(k < n)
	{
		k *= 2;
		++count;
	}
	return count ;
}

int main()
{
	int i,j,k;
	int amount;
	while(scanf("%d", &cash) != EOF)
	{
		memset(f,0,sizeof(f));
		scanf("%d", &kinds);
		for(i = 1;  i <= kinds; ++i)
			scanf("%d%d", num + i, cost + i);
		for(i = 1; i <= kinds; ++i)
		{
			if(num[i] * cost[i] >= cash)
			{
				for(j = cost[i]; j <= cash; ++j)
					f[j] = max(f[j], f[j - cost[i]] + cost[i]);
			}
			else
			{
				k = 1;
				amount  = num[i];
				while(k < maxk(num[i]))
				{
					for(j = cash; j >= k * cost[i]; --j)
						f[j] = max(f[j], f[j - k * cost[i]] + k * cost[i]);
					amount -= k;
					k *= 2;
				}
				for(j = cash; j >= amount * cost[i]; --j)
					f[j] = max(f[j], f[j - amount * cost[i]] + amount * cost[i]);
			}
		}
		printf("%d\n",f[cash]);
	}
	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