Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.06.2013, 19:04   #11
UaKot
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 36
По умолчанию

Цитата:
Сообщение от Smogg Посмотреть сообщение
На таком входе:
6
1 2 7 14 15 16

отвечает 8.

Здесь мерещится мне какая-то фигня с непроверкой граничных условий.

Хотя чем дальше, тем меньше я понимаю, что в итоге из этого исходника у меня накомпилялось и как вообще решать задачу кроме тупого перебора..
Так все правильно же. 8.
1-2-7 14-15-16
(2-1) + (7-2) + (15-14) + (16 - 15) = 8
как раз 8.. и меньше нельзя.

И решается именно динамическим программированием, потому что перебор не пройдет по времени. Не только же правильный ответ важен, а еще скорость выполнения...

Последний раз редактировалось UaKot; 20.06.2013 в 19:10.
UaKot вне форума Ответить с цитированием
Старый 22.06.2013, 01:18   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

На обоих сайтах ОК.
Код:
#include <fstream>
#include <algorithm>

int 
main()
{
    int N;
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    fin >> N;
    int *a = new int[N];
    for (int i = 0; i < N; i++)
        fin >> a[i];
    std::sort(a, a + N);
    if (N == 2 || N == 3) {
        fout << a[N - 1] - a[0];
    } else {
        int *b = new int[N - 1];
        b[0] = a[1] - a[0];
        b[1] = a[2] - a[0];
        for (int j = 2; j < N - 1; ++j)
            b[j] = std::min(b[j - 1], b[j - 2]) + a[j + 1] - a[j];
        fout << b[N - 2];
        delete []b;
    }
    delete []a;
}
Формула подсмотрена на informatics.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.06.2013, 10:54   #13
UaKot
Пользователь
 
Регистрация: 16.02.2013
Сообщений: 36
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
На обоих сайтах ОК.
Код:
#include <fstream>
#include <algorithm>

int 
main()
{
    int N;
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    fin >> N;
    int *a = new int[N];
    for (int i = 0; i < N; i++)
        fin >> a[i];
    std::sort(a, a + N);
    if (N == 2 || N == 3) {
        fout << a[N - 1] - a[0];
    } else {
        int *b = new int[N - 1];
        b[0] = a[1] - a[0];
        b[1] = a[2] - a[0];
        for (int j = 2; j < N - 1; ++j)
            b[j] = std::min(b[j - 1], b[j - 2]) + a[j + 1] - a[j];
        fout << b[N - 2];
        delete []b;
    }
    delete []a;
}
Формула подсмотрена на informatics.
Спасибо, но я нашел свою ошибку При N == 3 or N == 4 у меня вывод был в консоль, я забывал переделать в файл ) А на другом сайте и в консоль, и в файл можно, вот он все и проходил там.

P.S. мой алгоритм быстрее этого :Р

Последний раз редактировалось UaKot; 22.06.2013 в 11:46.
UaKot вне форума Ответить с цитированием
Старый 22.06.2013, 14:41   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,430
По умолчанию

Цитата:
Сообщение от UaKot Посмотреть сообщение
Спасибо, но я нашел свою ошибку При N == 3 or N == 4 у меня вывод был в консоль, я забывал переделать в файл ) А на другом сайте и в консоль, и в файл можно, вот он все и проходил там.

P.S. мой алгоритм быстрее этого :Р
Хорошо, что нашли.
Разницы в скорости почти нет:
Ваш:
Цитата:
1 Accepted 0,05 60 Кб
2 Accepted 0,008 60 Кб
3 Accepted 0,008 60 Кб
4 Accepted 0,01 60 Кб
5 Accepted 0,008 60 Кб
6 Accepted 0,008 60 Кб
7 Accepted 0,008 60 Кб
8 Accepted 0,008 60 Кб
9 Accepted 0,008 60 Кб
10 Accepted 0,01 60 Кб
11 Accepted 0,008 60 Кб
12 Accepted 0,01 60 Кб
13 Accepted 0,008 60 Кб
14 Accepted 0,008 60 Кб
15 Accepted 0,009 60 Кб
16 Accepted 0,01 60 Кб
"Мой":
Цитата:
1 Accepted 0,042 60 Кб
2 Accepted 0,008 60 Кб
3 Accepted 0,008 60 Кб
4 Accepted 0,008 60 Кб
5 Accepted 0,008 60 Кб
6 Accepted 0,008 60 Кб
7 Accepted 0,012 60 Кб
8 Accepted 0,008 60 Кб
9 Accepted 0,007 60 Кб
10 Accepted 0,008 60 Кб
11 Accepted 0,008 60 Кб
12 Accepted 0,008 60 Кб
13 Accepted 0,01 60 Кб
14 Accepted 0,009 60 Кб
15 Accepted 0,008 60 Кб
16 Accepted 0,009 60 Кб
При отказе от динамического выделения памяти:
Цитата:
1 Accepted 0,035 60 Кб
2 Accepted 0,009 60 Кб
3 Accepted 0,008 60 Кб
4 Accepted 0,008 60 Кб
5 Accepted 0,01 60 Кб
6 Accepted 0,008 60 Кб
7 Accepted 0,008 60 Кб
8 Accepted 0,008 60 Кб
9 Accepted 0,008 60 Кб
10 Accepted 0,008 60 Кб
11 Accepted 0,008 60 Кб
12 Accepted 0,008 60 Кб
13 Accepted 0,008 60 Кб
14 Accepted 0,009 60 Кб
15 Accepted 0,008 60 Кб
16 Accepted 0,008 60 Кб
Код:
#include <fstream>
#include <algorithm>

int 
main()
{
    int N, a[100], b[100];
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    fin >> N;
    for (int i = 0; i < N; i++)
        fin >> a[i];
    std::sort(a, a + N);
    if (N == 2 || N == 3) {
        fout << a[N - 1] - a[0];
    } else {
        b[0] = a[1] - a[0];
        b[1] = a[2] - a[0];
        for (int j = 2; j < N - 1; ++j)
            b[j] = std::min(b[j - 1], b[j - 2]) + a[j + 1] - a[j];
        fout << b[N - 2];
    }
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 22.06.2013 в 14:44.
BDA вне форума Ответить с цитированием
Старый 22.06.2013, 21:22   #15
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от UaKot Посмотреть сообщение
Спасибо, но я нашел свою ошибку При N == 3 or N == 4 у меня вывод был в консоль, я забывал переделать в файл )
Алгоритм верный. Значит, все таки молодец!

Опечатки - всего лишь опечатки.
Если использовать #ifdef _DEBUG#else...#endif, то код сразу перестает быть лаконичным и красивым.
Smogg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое программирование DRGNforce Паскаль, Turbo Pascal, PascalABC.NET 4 01.03.2013 15:35
Динамическое программирование. IllidanStormrage Помощь студентам 0 06.11.2011 19:03
Динамическое программирование!!! Fuckkiller Microsoft Office Excel 13 04.05.2011 19:03
динамическое программирование stefan0202 Паскаль, Turbo Pascal, PascalABC.NET 3 07.02.2011 22:05
Динамическое программирование joey_ramone Паскаль, Turbo Pascal, PascalABC.NET 0 23.04.2010 13:51