天天看點

TopCoder SRM 512 DIV1 MysteriousRestaurant

題意:

一家餐館開張N天,有M道菜,每天每道菜的價格都在變化,而且如果某天你點了某道菜,下周這一天也要點這道菜,否則你就進黑名單了……請問對給定的預算最多能吃幾天?

題解:

二分能吃的天數K,然後枚舉第一周每天點的菜,每次找在K天裡總花費最小的,看能不能滿足。

因為資料範圍小,懶得預處理了,每次都重新掃一遍……

import java.util.*;

public class MysteriousRestaurant
{
	int getnum(char c)
	{
		if(c>='0'&&c<='9')	return c-'0';
		else	if(c>='A'&&c<='Z')	return c-'A'+10;
		else	return c-'a'+36;
	}
	boolean check(String []strs,int  budget,int m)
	{
		int n=strs[0].length();
		for(int i=0;i<7&&i<m&&budget>=0;++i)
		{
			int tmp=1000000000;
			for(int j=0;j<n;++j)
			{
				int sum=0;
				for(int p=i;p<m;p+=7)
					sum+=getnum(strs[p].charAt(j));
				tmp=Math.min(tmp, sum);
			}
			budget-=tmp;
		}
		return budget>=0;
	}
	public int maxDays(String[] prices, int budget)
	{
		int r=prices.length,l=0,mid;
		while(l<r)
		{
			mid=(l+r+1)/2;
			if(check(prices,budget,mid))	
				l=mid;
			else	r=mid-1;
		}
		return l;
	}
}
           

繼續閱讀