Problem Statement | |||||||||||||
A mysterious new restaurant is open in the city for only N days. Happy to hear that, Ash and Elsh would like to have lunch at the restaurant on as many days as possible. The restaurant sells M types of dishes. Being a mysterious restaurant, it has mysterious rules for the customers:
Mysteriously, the price of each type of dish varies every day. You are given a vector <string> prices consisting of N elements, each containing M characters.prices[i][j] represents the price of the j-th type of dish on the i-th day, encoded as follows:
Ash and Elsh have only budget dollars allocated for having lunch in the restaurant. Return the maximum number of days they could have lunch in the restaurant. | |||||||||||||
Definition | |||||||||||||
| |||||||||||||
Constraints | |||||||||||||
- | prices will contain between 1 and 50 elements, inclusive. | ||||||||||||
- | Each element of prices will contain the same number of characters, between 1 and 50 characters, inclusive. | ||||||||||||
- | Each character in prices will be '0'-'9', 'a'-'z', or 'A'-'Z'. | ||||||||||||
- | budget will be between 0 and 10,000, inclusive. | ||||||||||||
Examples | |||||||||||||
0) | |||||||||||||
| |||||||||||||
1) | |||||||||||||
| |||||||||||||
2) | |||||||||||||
| |||||||||||||
3) | |||||||||||||
|
这题是div2中档题,div1的水题,我用了一种错误的算法,看了楼爷的code,才想明白自己wa哪里
ps:终于习惯了tc的输入输出!找到的插件貌似不会测试代码,只是简单的编辑功能,可能我不会用吧~
ac代码:
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
#define sz(a) int((a).size())
class MysteriousRestaurant {
public:
int maxDays(vector <string>, int);
int cal(char c);
};
int MysteriousRestaurant::maxDays(vector <string> prices, int budget) {
int n=prices.size();
int m=prices[0].size();
int b=budget;
int i,j,k,s;
for(s=n;s>0;s--){ //从后向前查找,妙!
int a[7][60];
memset(a,0,sizeof(a));
for(i=0;i<s;i++)
for(j=0;j<m;j++)
a[i%7][j]+=cal(prices[i][j]);
int sum=0;
for(i=0;i<7;i++)
{
int p=a[i][0];
for(j=0;j<m;j++)
p=min(p,a[i][j]);
sum+=p;
}
if(sum<=b)
return s;
}
return 0;
}
int MysteriousRestaurant::cal(char c){
if(c>='0' && c<='9')
return c-'0';
if(c>='A' && c<='Z')
return c-'A'+10;
if(c>='a' && c<='z')
return c-'a'+36;
return -1;
}
wa代码:
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
class MysteriousRestaurant {
public:
int cal(char c)
{
if(c>='0' && c<='9')
return c-'0';
if(c>='A' && c<='Z')
return c-'A'+10;
if(c>='a' && c<='z')
return c-'a'+36;
}
int maxDays(vector<string>prices,int budget){
int choice[100]={0};
int i,j,k;
for(i=0;i<prices.size();i++){
int mn=999999999,idx=0;
for(j=0;j<prices[0].size();j++){
int sum=0;
for(k=i;k<prices.size();k+=7){
sum+=cal(prices[k][j]);//
}
if(sum<mn)
mn=sum,idx=j;
}
choice[i]=idx;
}
for(i=0;i<prices.size();i++){
if(budget < cal(prices[i][choice[i%7]]))
return i;
budget-=cal(prices[i][choice[i%7]]);
}
return prices.size();
}
};//错误数据:{"97","97","97","97","97","97","97","19","19","19","19","19","19","19"} 15