![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
LammerzAttack |
![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 18 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот такая интересная задача:
Имя входного файла: dice.in Имя выходного файла: dice.out Количество тестов: 15 Ограничение по памяти: 1 Мб Ограничение по времени: 1 с На клетчатом поле размером MxN в левом нижнем углу лежит игральная кость. За один ход ее можно перекатить на клетку вправо или вверх. Стоимостью пути называется сумма чисел на верхней грани кубика во всех клетках пути. Найдите минимальную стоимость пути в правый верхний угол. Формат входного файла В первой строке два натуральных числа N и M <= 1000 — размеры доски. Во второй строке три числа от 1 до 6 — числа на верхней, левой и передней грани кубика соответственно (сумма чисел на противоположных гранях кубика равна 7). Формат выходного файла Одно натуральное число — минимальная стоимость искомого пути. Пример dice.in 5 5 1 4 5 dice.out 29 Помогите с решением. |
![]() ![]() |
virt |
![]() ![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 419 Пол: Мужской Репутация: ![]() ![]() ![]() |
Код Program Dice; uses crt; type line=array[1..300] of shortint; matrix=array[1..6] of shortint; var NN,MM,limit,k:integer; mass:matrix; lin,way:line; procedure dices(masss:matrix;direct:char;n,m,turn:integer); begin if (n<1) or (m>MM) or (turn>=limit) then exit else if (nn-n+1)+m=NN+MM then begin limit:=turn; {на данный момент наименьшая сумма верхних граней} lin:=way; exit; end; if direct='r' then {так кубик вращается вправо} begin k:=masss[5]; masss[5]:=masss[4]; masss[4]:=masss[3]; masss[3]:=masss[2]; masss[2]:=k; end else if direct='u' then {так кубик вращается вверх} begin k:=masss[6]; masss[6]:=masss[2]; masss[2]:=masss[1]; masss[1]:=masss[4]; masss[4]:=k; end; way[(nn-n)+m]:=masss[2]; {промежуточный путь кубика в виде массива значений верхних граней} dices(masss,'u',n-1,m,turn+masss[2]); dices(masss,'r',n,m+1,turn+masss[2]); end; BEGIN clrscr; writeln('ўўҐ¤ЁвҐ N'); readln(NN); writeln('ўўҐ¤ЁвҐ M'); readln(MM); limit:=maxint; {типа первый предел суммы, от фоная} for k:=1 to 300 do lin[k]:=0; {массив ходов} way:=lin; writeln('ўўҐ¤ЁвҐ front'); readln(mass[1]); {это сам кубик} writeln('ўўҐ¤ЁвҐ up'); readln(mass[2]); {это сам кубик} writeln('ўўҐ¤ЁвҐ right'); readln(mass[3]); {это сам кубик} mass[4]:=7-mass[2]; {это сам кубик} mass[5]:=7-mass[3]; {это сам кубик} mass[6]:=7-mass[1]; {это сам кубик} dices(mass,'0',nn,1,0); readln; END. так вроде лучше. -------------------- |
madrabbit |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 14 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата так вроде лучше. ага, спасибо, вроде смотрю-правильно, а тест не работает... в чем ошибка и 1000*1000 не получается-переполнение стека, че делать... ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 22:30 |