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

Оптимальное заполнение или "Халява" - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ дата http://www.cyberforum.ru/cpp-beginners/thread435250.html
Ввести (с клавиатуры) дату в формате ДД.ММ,ГГГГ и вывести на экран дату следующего дня (используются операторы *Условия выбора и циклы*-по заданию) заранее спасибо очень тяжело Си дается
C++ Аварийное завершение... почему? Код рабочий, но если элементов больше 4, тогда программа аварийно завершает работу, почему? #include <iostream> using namespace std; string Read(string Mass, int size){for(int i=0;i<size;i++){cout<<">"<<Mass<<endl;}} int main() { //string List={"one","two","three","four","five"}; string List={"one","two","three","four"}; http://www.cyberforum.ru/cpp-beginners/thread435243.html
C++ Решение задачи
Как решить задачу: поменять местами второй четный со вторым нечетным в одномерном массиве
C++ Поиск k-ого наименьшего элемента
Друзья есть код на паскале, нужно переписать на с++. Это алгоритм поиска к-го наименьшего элемента. У меня получается криво, с ошибками. procedure Find(k: integer); var L,R,i,j: integer; w,x: integer; begin L:=1; R:=N; while L<R-1 do begin
C++ Замена слов в строке http://www.cyberforum.ru/cpp-beginners/thread435213.html
Добрый вечер. Помогите, пожалуйста советом или кодом: требуется полученную строку изменить так, чтобы первое и среднее слово поменялись местами. void f(char *s) { int len=strlen(s); int na4slovo1=0,konezslovo1=0,na4slovo2=0,konezslovo2=0,kolslov=0; for(int k=0;k<len;k++) { if(s==' ' && s!=' ') //нашли количество слов kolslov++;
C++ зеркальное отображение в С Дана задача сделать зеркальное отображение двумерного массива M*N Нужно поменять 1-ый с последним, 2-ой с предпоследним и т.д. подробнее

Показать сообщение отдельно
Smart_S
0 / 0 / 0
Регистрация: 24.11.2013
Сообщений: 3
24.11.2013, 22:03     Оптимальное заполнение или "Халява"
Не знаю, принято ли тут создавать новые темы, или "поднимать" старые, так что на всякий случай напишу тут.

Тоже занялся этой задачкой.

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Могу описать алгоритм, который сам использовал для решения этой задачи:
Для решения нужны два трехмерных массива: t1[][][] размером (a+1)*(b+1)*(c+1) и t2[][][] такого же размера. Изначально значения массивов равны 0.
После "облома" с "оптимальным" набором крышек для каждой футболки (тест 0 12 3 11) сам пришёл к такому алгоритму, реализовал. Выдаёт правильные ответы, но:

1) Массив размером [100][100][100] создать не удается, по крайней мере Visual Studio ругается. Что предпринять?
2) Возможно, я где-то туплю, но решение не проходит по времени.


При этом, решения многих на ******** работают быстро и используют ~56 Кб памяти, вроде 2-мя трехмерными массивами не пахнет. Куда копать? Уже все мозги измучал, ЧСВ ниже плинтуса упало.

Код решения:

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
#include <iostream>
#include <fstream>
using namespace std;
int main() {
    int unused_stars[30][30][30];
    int clothes_number[30][30][30];
    ifstream in;
    ofstream out;
    in.open("INPUT.TXT");
    out.open("OUTPUT.TXT");
    int a, b, c, k;
    in >> a >> b >> c >> k;
    unused_stars[0][0][0] = 0;
    clothes_number[0][0][0] = 0;
    int i, j, n, current_unused_stars, current_clothes_number;
    for (i = 0; i <= c; i++) {
        for (j = 0; j <= b; j++) {
            for (n = 0; n <= a; n++) {
                current_clothes_number = 0;
                current_unused_stars = 0;
                if (n != 0) {
                    unused_stars[i][j][n] = unused_stars[i][j][n-1] + 1;
                    if (unused_stars[i][j][n] >= k) {
                        unused_stars[i][j][n] = 0;
                        clothes_number[i][j][n] = clothes_number[i][j][n - 1] + 1;
                    }
                    else clothes_number[i][j][n] = clothes_number[i][j][n - 1];
                } 
 
                if (j != 0) {
                    current_unused_stars = unused_stars[i][j-1][n] + 2;
                    if (current_unused_stars >= k) {
                        current_unused_stars = 0;
                        current_clothes_number = clothes_number[i][j-1][n] + 1;
                    }
                    else current_clothes_number = clothes_number[i][j-1][n];
                }
 
                if ((current_clothes_number > clothes_number[i][j][n]) || ((current_clothes_number == clothes_number[i][j][n]) && (current_unused_stars > unused_stars[i][j][n]))) {
                    clothes_number[i][j][n] = current_clothes_number;
                    unused_stars[i][j][n] = current_unused_stars;
                }
 
                if (i != 0) {
                    current_unused_stars = unused_stars[i-1][j][n] + 3;
                    if (current_unused_stars >= k) {
                        current_unused_stars = 0;
                        current_clothes_number = clothes_number[i-1][j][n] + 1;
                    }
                    else current_clothes_number = clothes_number[i-1][j][n];
                }
 
                if ((current_clothes_number > clothes_number[i][j][n]) || ((current_clothes_number == clothes_number[i][j][n]) && (current_unused_stars > unused_stars[i][j][n]))) {
                    clothes_number[i][j][n] = current_clothes_number;
                    unused_stars[i][j][n] = current_unused_stars;
                }
            }
        }
    }
    out << clothes_number[c][b][a];
    in.close();
    out.close();
    return 0;
}
 
Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru