题意:
一家餐馆开张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;
}
}