WaterMan
J.R.R.
offline
Опыт:
17,019Активность: |
[!Pascal, (java)] Требуется помощь, срочно
В общем, есть задача. Требуется написать программу на языке Паскаль. В гугле не смог найти, но если кто-то сможет найти - тоже вариант. Условие:
Суммы
Ограничение времени: 2.0 секунды Ограничение памяти: 64 МБ Дано N целых чисел A1, A2, ..., AN. Требуется найти количество различных значений сумм вида k1A1 + k2A2 + ... + kNAN , где ki принимает значение нуля или единицы.
Входные данные:
В первой строке находится число N, во второй - A1, A2, ..., AN через пробел (1 <= N <= 500, 0 <= Ai <= 100).
Выходные данные:
Вывести одно число - количество различных значений сумм.
Пример входных данных:
3
1 1 2 Пример выходных данных:
5
__________ Заранее спасибо WaterMan добавил:
Вроде какое-то решение нашел на java, надо бы проверить и перевести в pascal, некоторых функций я не знаю: ((код
void solve(){ int n = nextInt(); int[] k = new int[100+1]; boolean[] a = new boolean[50001]; for (int i=0; i<n; i) k[nextInt()]; int maxi = 0, tempmax, vir; a[0]=true; for (int i=0; i<101; i++) { tempmax = maxi; if (k[i]>0) { for (int j=maxi; j>-1; j--) { if (a[j]) { for (int koef=1; koef<=k[i]; koef++) { vir = (koef*i+j); tempmax = tempmax<vir?vir:tempmax; a[vir] = true; } } } } maxi = tempmax>maxi?tempmax:maxi; } int result = 0; for (int i=0; i<50001; i++) { if (a[i]) { result++; } } out.println(result); } )) Отредактировано WaterMan, 04.11.2010 в 14:02. |
04.11.2010, 13:47 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|