32 厨师做饭
一个厨师出售1~6种不同的食物,每种食物都需要使用各自的特殊厨具,厨师的灶台最多只能同时摆放3种厨具,所以厨师决定空间不够时就更换最久没使用过的厨具。每种食物烹饪都需要15分钟,更换一次厨具需要6分钟。请计算按点单顺序完成输入的点单列表所需时间。
输入描述
每行一个数字,1~6代表6种订单,7代表结束
输出描述
一个数字,代表厨师需要的总时间
示例1
输入
2 2 5 6 4 2 4 6 5 2 3 3 3 3 4 6 1 5 1 1 7
输出
354
#include <iostream>
#include <cstdio>
using namespace std;
int main(){
int x[3] = {}, cur = 0;
int a;
int res = 0;
while (cin>>a) {
if (a == 7) {
break;
}
int flag = 0;
for (int i = 0; i < 3; i++) {
if (x[i] == a) {
flag = 1; break;
}
}
res += 15;
if (!flag) {
res += 6;
}
for (int i = 1; i >= 0; i--) {
if (x[i] != a) x[i+1] = x[i];
}
x[0] = a;
}
for (int i = 0; i < 3; i++) if (x[i]) {
res -= 6;
}
cout << res;
return 0;
}
33 机器人大赛
小明参加机器人大赛,比赛的场地是一个n*m的方块。
现在规定,机器人从左上角出发,前往右下角。因为时间紧张,小明只设计出了最简单的智能算法,他的机器人只会向下或者向右。
小明现在想知道,一共有多少种方案能达到终点?
输入描述
输入的第一行是两个整数n, m (1<=n,m<=10)
接下来的n行,每行m个数字
数字只会是0或者1
0代表可以通过,1代表障碍物
数据保证起点终点一定是0
输出描述
一个正整数ans,表示方案数
数据随机生成,且保证答案不超过2^31
示例1
输入
5 5 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0
输出
1
示例2
输入
10 10 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
输出
3463
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, a[11][11];
int dp[11][11];
int main(){
cin >> n >> m;
for (int i = 0 ; i < n ; i++) {
for (int j = 0 ; j < n; j++) {
cin >> a[i][j];
}
}
dp[0][0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (a[i][j] == 1) continue;
if (i > 0 && a[i-1][j] == 0) {
dp[i][j] += dp[i-1][j];
}
if (j > 0 && a[i][j-1] == 0) {
dp[i][j] += dp[i][j-1];
}
}
}
cout << dp[n-1][m-1];
return 0;
}
|