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

ДП Динамическое программирование - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив разных объектов http://www.cyberforum.ru/cpp-beginners/thread686466.html
Здравствуйте, в институте задали написать шахматы на C++ с использованием классов, т.е все фигуры(например TPawn) должны быть основаны на одном родительском классе(TFigure). Я начал писать но у...
C++ Сформировать матрицу В путем вычеркивания строки и столбца, на пресечении которых расположен минимальный элемент матрицы А Задание к лабораторной работе Дана матрица А (5*5) нецелых элементов. -3,8 0 5,3 4,5 0,5 0,2 -1,3 0 -8,5 3,5 -1,1 1,8 5,1 -8,2 0,32 0 ... http://www.cyberforum.ru/cpp-beginners/thread686458.html
Рекурсия C++
Подскажите пожалуйста, почему когда я ввожу число состоящее из большого количества знаков(например 11111111111111111111), то программа выдаёт хз что, а когда из 123123, то нормально работает. Суть...
Организация меню в программе C++
Как правильно организовать меню в консольной программе с помощью switch case? Я делал так, но не змею правильно ли? #include <cstdlib> #include <iostream> #include <cmath> using namespace std;...
C++ Как написать программу, которая читает список целых int in array и количество повторов по каждой цифре? http://www.cyberforum.ru/cpp-beginners/thread686435.html
Необходимо написать программу, которая читает список целых int in array и количество повторов по каждой цифре. - программа должна читать список из файла (никак не соображу как это делается); -...
C++ скиньте Дистрибутив linux с kdevelop чтобы запускать с флешке нужен Дистрибутив linux с kdevelop чтобы запускать с флешке... заранее спасибо подробнее

Показать сообщение отдельно
Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595

ДП Динамическое программирование - C++

01.11.2012, 21:59. Просмотров 975. Ответов 2
Метки (Все метки)

ограничение времени на тест: 0.5 сек.
ограничение памяти на тест: 65536 KB.

Рассмотрим все строки длины N, состоящие только из букв 'a' и 'b', в которых никакие две буквы 'b' не идут подряд. Упорядочим их в алфавитном порядке. Вам необходимо найти K-ю строку в упорядоченном списке.

Входные данные
Числа N (1 <= N <= 90) и K (K >= 1). Гарантируется, что K не превосходит общего числа рассматриваемых строк.

Выходные данные
Выведите искомую строку.

Пример

Ввод
3 5

Вывод
bab
{------------------------------------------}
Вот моё решение:
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
#include <iostream>
#include <cmath>
#include <vector>
#include <bitset>
 
using namespace std;
 
vector <unsigned long long> fib(2, 1);
 
unsigned long long calc(long long k){
    int j = 0;
    if (k == 0) return 0;
    if (k == 1) return 1;
    while (fib[j] <= k) 
        j++;
    j--;
    unsigned long long c = fib[j];
    return pow(2, double(j-1)) + calc(k-c);
}
int main(){ 
    int n;
    unsigned long long k;
    cin >> n >> k;
    for (int i = 2; i <= n+1; i++){
        fib.push_back(fib[i-1] + fib[i-2]);
    }
    unsigned long long temp = calc(k-1);
    bitset<100> c = temp;
    for (int i = n-1; i >= 0; i--)
        cout << ((c[i])?'b':'a');
    return 0;
}
1) Я заметил, что начиная с 78 числа Фибоначчи в векторе fib значения уже неправильные, хотя в ulong long вмещается
2) Проходит 29 из 50 тестов c ошибкой wrong answer
3) Можно ли перевести в bitset ulonglong ?
Разъясню алгоритм:
а = 0; b = 1;
строки длины 4
____
0000 = 0
____
0001 = 1
____
0010 = 2
____
0100 = 4
0101 = 5
____
1000 = 8
1001 = 9
1010 = 10
____
и так далее
1) видно, что длина пака - это число фибоначчи
1.5) собсно терь перевидём всё в 10-ю запись
2) теперь видно, что начиная со 2-ой пачки z[k] = 2^j + z[i], где i [0..fib[j]]
3) Но так как длина z будет очень большой замутим рекурсию.
х3 в чём ошибка

Добавлено через 7 минут
и k [2^j..2^j + fib[j]]

Добавлено через 3 минуты
Ой!!! Т.Е : z[i] = 2^j + z[i - fib[j]], по i [0..fib[j-1])
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru