列表

详情


NC21312. 神秘餐馆

描述

一家神秘餐馆准备开放N天,牛牛 和 牛妹听到这个消息后,准备尽可能多的一起去吃午饭

餐馆有M道菜,牛牛和牛妹每次来只允许点一道菜,如果在第i天买了第j道菜
那么第i+7天也只能买第j道菜
第i天第j道菜的价格为price[i][j]
'0'-'9'代表0-9美元
'A'-'Z'代表10-35美元
'a'-'z'代表36-61美元

牛牛和牛妹一共只有budget美元,请问他们最多可以吃几天的午饭

输入描述

第一行输入3个整数n,m,budget (1 ≤ n ≤ 50, 1 ≤ m ≤ 50, 0 ≤ budget ≤ 10000)
接下来n行每行输入一个字符串,包含m个字符
第i行的第j个字符表示第i天第j道菜的价格

输出描述

输出一个整数

示例1

输入:

7 2 13
26
14
72
39
32
85
06

输出:

5

示例2

输入:

8 2 20
26
14
72
39
32
85
06
91

输出:

8

示例3

输入:

12 4 256
Dear
Code
rsHa
veFu
nInT
heCh
alle
ngeP
hase
andb
ecar
eful

输出:

10

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 608K, 提交时间: 2020-03-07 22:50:54

#include<stdio.h>
#define fo(i,a,b) for(int i=a;i<=b;i++)
int n,m,bg,p[60][60],d[8][14],dt[8],c[8][52],mi[8],sum;
char s[60];
int main()
{
	scanf("%d%d%d",&n,&m,&bg);
	fo(i,1,n)
	{
		scanf("%s",s+1);
		fo(j,1,m)
		{
			if('0'<=s[j]&&s[j]<='9') p[i][j]=s[j]-'0';
			if('A'<=s[j]&&s[j]<='Z') p[i][j]=s[j]-'A'+10;
			if('a'<=s[j]&&s[j]<='z') p[i][j]=s[j]-'a'+36; 
		}
	}
	fo(i,1,n)
	{
		d[i%7][++dt[i%7]]=i;
		fo(j,1,m) c[i%7][j]+=p[i][j];
		sum-=mi[i%7];
		mi[i%7]=c[i%7][1];
		fo(j,2,m) if(c[i%7][j]<mi[i%7]) mi[i%7]=c[i%7][j];
		sum+=mi[i%7];
		if(sum>bg)
		{
			printf("%d\n",i-1);
			return 0;
		}
	}
	printf("%d\n",n);
}

C++14(g++5.4) 解法, 执行用时: 3ms, 内存消耗: 380K, 提交时间: 2019-02-25 11:33:20

#include<stdio.h>
#define fo(i,a,b) for(int i=a;i<=b;i++)
int n,m,bg,p[60][60],d[8][14],dt[8],c[8][52],mi[8],sum;
char s[60];
int main(){
	scanf("%d%d%d",&n,&m,&bg);
	fo(i,1,n){
		scanf("%s",s+1);
		fo(j,1,m){
			if ('0'<=s[j]&&s[j]<='9') p[i][j]=s[j]-'0';
			if ('A'<=s[j]&&s[j]<='Z') p[i][j]=s[j]-'A'+10;
			if ('a'<=s[j]&&s[j]<='z') p[i][j]=s[j]-'a'+36;
		}
	}
	fo(i,1,n){
		d[i%7][++dt[i%7]]=i;
		fo(j,1,m) c[i%7][j]+=p[i][j];
		sum-=mi[i%7];
		mi[i%7]=c[i%7][1];
		fo(j,2,m) if (c[i%7][j]<mi[i%7]) mi[i%7]=c[i%7][j];
		sum+=mi[i%7];
		if (sum>bg){
			printf("%d\n",i-1);
			return 0;
		}
	}
	printf("%d\n",n);
}

上一题