Форум программистов, компьютерный форум CyberForum.ru

Динамическое программирование. Рыцарь. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ подскажите аналог конструкции pascal в c http://www.cyberforum.ru/cpp-beginners/thread221841.html
Начал изучать язык Си без плюсов. подскажите, пожалуйста, аналог такой конструкции pascal if a in then в языке Си
C++ очень надо к 6 часам очень гадо к 6 часам Класс n-мерных векторов Базовый класс (координаты начала и конца вектора Совет: реализовать дополнительный класс NPoint, содержащий в виде массива координаты n-мерных точек, а также количество координат - N) Конструкторы: по умолчанию, с параметрами и копирования. Деструктор. Функции: перегрузки операции сложения; Перегрузка операции вычитания; перегрузки операции... http://www.cyberforum.ru/cpp-beginners/thread221836.html
C++ Вычислить: y=1!+2!+3!+…+n! (n>0).
Вычислить: y=1!+2!+3!+…+n! (n>0). Всем плюсану!
Даны действительные числа А,В,С . Найти те из них которые не принадлежат заданному отрезку [0; 2]. C++
Даны действительные числа А,В,С . Найти те из них которые не принадлежат заданному отрезку . кто напишет правильно программу тому "+"
C++ Сохранение информации в файле и считывание из него http://www.cyberforum.ru/cpp-beginners/thread221828.html
В файле сохраняется информация о деятельности некоторых подразделений: наименование подразделения, количество сотрудников, прибыль, полученная за текущий квартал. Определить лучшее подразделение с учетом числа сотрудников.
C++ C++ Блок схема Всем доброго времени суток. Есть проблема, которую я сам решить не могу из-за того, что ничерта не понимаю. Суть ее в следующем, есть код программы, написанной в С++, к этой программе нужна блок схема. Парни, кто может, помогите плиз, ну прям очень надо. Из за этой схемы курсак сдать не могу. Заранее всем откликнувшимся огромное спасибо. #include <iostream> #include <string> #include <vector>... подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
26.01.2011, 18:40     Динамическое программирование. Рыцарь.
Цитата Сообщение от tymrfik Посмотреть сообщение
модификация первой, основанная на механизме «запоминания».
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include<iostream>
#include<vector>
#include<stdio.h>
#include<conio.h>
using namespace std;
    struct room{
        vector<int> v;
    };
 
int main()
{
    vector<int>::iterator y;
    room **field;
    char *mas_res;
    int N, M, i, j,  **matrix, sum=0, i_res=0, i_sum=0, num, Sum;
    cin>>N>>M;
    mas_res=new char[M-1];
    field=new room*[M];
    matrix=new int*[M];
    for(i=0; i<M; i++)
    {
        field[i]=new room[N];
        matrix[i]=new int[N];
        for(j=0; j<N; j++)
            cin>>matrix[i][j];    
    }
    for(int i=0; i<N; i++)
        field[0][i].v.push_back(matrix[0][i]);
    for(int i=0; i<M-1; i++)
    for(int j=0; j<N; j++)
    {  
          for(y=field[i][j].v.begin(); y!=field[i][j].v.end(); ++y)
        {
             field[i+1][j].v.push_back(matrix[i+1][j]+*y);
             if(j>0)
                field[i+1][j-1].v.push_back(matrix[i+1][j-1]+*y);
            if(j<N-1)
                field[i+1][j+1].v.push_back(matrix[i+1][j+1]+*y);
        }
    }
    for(i=0; i<N; i++)
        for(y=field[M-1][i].v.begin(); y!=field[M-1][i].v.end(); ++y)
            if(sum<*y)
            {
                sum=*y;
                i_sum=i;
            }
    Sum=sum;
    for(i=M-2; i>=0; i--)
    {
        bool fl=true;
        for(y=field[i][i_sum].v.begin(); y!=field[i][i_sum].v.end(); ++y)
            if(sum-matrix[i+1][i_sum]==*y)
            {
                sum=*y;
                fl=false;
                mas_res[i_res++]='S';
                break;
            }
        if(fl && i_sum>0)
        {
            for(y=field[i][i_sum-1].v.begin(); y!=field[i][i_sum-1].v.end(); ++y)
                if(sum-matrix[i+1][i_sum]==*y)
                {
                    sum=*y;
                    i_sum--;
                    fl=false;               
                    mas_res[i_res++]='E';
                    break;
                }
        }
        if(fl && i_sum<N-1)
        {
            for(y=field[i][i_sum+1].v.begin(); y!=field[i][i_sum+1].v.end(); ++y)
                if(sum-matrix[i+1][i_sum]==*y)
                {
                    sum=*y;
                    i_sum++;
                    fl=false;       
                    mas_res[i_res++]='W';       
                    break;                  
                }
        }
    }
    cout<<i_sum+1<<endl;
    for(i=M-2; i>=0; i--)
        cout<<mas_res[i];
    cout<<endl<<Sum<<endl;
    return 0;
        }
Два важных момента:
- я как всегда не освободил память, выделенную динамически. Хоть как-то свою лепту внесете.
- потестируйте код. Если что не устроит пишите, но сегодня буду недоступен, постараюсь завтра утром посмотреть (сам проверил, но немного).
 
Текущее время: 18:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru