>>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
>>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