題意:
一家餐館開張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;
}
}