プログラミングのお題スレ Part18
(ID:EhLQImvSのみ表示中)
戻る
498253 [sage]

AAS

NG

>>462 Perl5、人の訪問を待ち受け得るすべての場合を愚直に総当りで最大満足数を探す

$T = <DATA>;
use feature qw{signatures say}; no warnings 'experimental';
chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p, $s) {
 if ($t++ < $T) {
  if (0 < $p and $p < 11) {
   $s++ if grep/$p/, @{$p{$t}};
   $s += max(f($t, $p-1, $s), f($t, $p, $s), f($t, $p+1, $s))
  }
  return $s
 }
0
}
say f(0, 1, 0);
__DATA__
5
5 4
2 3
3 2
3 4
4 4

~ $ perl 18_454_N_vztr.pl
4

2020/09/06(日)18:02:02 EhLQImvS.net


501253 [sage]

AAS

NG

>>500
はい、バグってました。投稿してから気がついた
時間あったら直します

2020/09/06(日)18:20:26.24(EhLQImvS.net)


502253 [sage]

AAS

NG

>>498 Perl5、>>497 のBug Fix、同じ所を何度も通るので漸化式かメモ化使って動的計画法で解けるようにできるかもしれない

use feature qw{signatures say}; no warnings 'experimental';
$T = <DATA>; chomp $T;
push @{$p{$$_[0]}}, $$_[1] for map{[split' ']}<DATA>;
use List::Util 'max';
sub f($t, $p) {
 my $s = 0;
 if ($t <= $T) {
  if (0 < $p and $p < 11) {
   $s++ if grep{$_ eq $p} @{$p{$t}};
   $t++;
   $s += max(f($t, $p-1), f($t, $p), f($t, $p+1));
  }
 }
 $s
}
say f(0, 1);
__DATA__
11
3 2
2 3
3 4
4 4
5 4
4 7
5 7
6 7
7 7
8 7
[全て表示]

2020/09/06(日)19:04:52.54(EhLQImvS.net)


503253 [sage]

AAS

NG

>>502 誤記スマソ
× >>497 のBug Fix
>>498 のBug Fix

2020/09/06(日)19:13:46.76(EhLQImvS.net)


戻る
ver.151005sp