Skip to content

Instantly share code, notes, and snippets.

@tomcha
Last active January 4, 2019 15:10
Show Gist options
  • Save tomcha/c70531d20fab56181b977b9475ca7f2e to your computer and use it in GitHub Desktop.
Save tomcha/c70531d20fab56181b977b9475ca7f2e to your computer and use it in GitHub Desktop.
ナップサック問題
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature 'say';
use List::Util 'max';
chomp(my $input = <STDIN>);
my ($n, $w) = split(/ /, $input);
my ($val, $wei);
my $items = [];
for my $i (0..($n - 1)){
chomp($input = <STDIN>);
($val, $weight) = split(/ /, $input);
push(@$items, [$val, $weight]);
}
my $dp = [];
for my $j (0..$n){
for my $k (0..$w){
$dp->[$j]->[$k] = 0;
}
}
for my $nums (1..$n){
for my $weig (0..$w){
if ($weig >= $items->[$nums - 1]->[1]){
$dp->[$nums]->[$weig] = max($dp->[$nums - 1]->[$weig - $items->[$nums - 1]->[1]] + $items->[$nums - 1]->[0], $dp->[$nums - 1]->[$weig]);
}
else{
$dp->[$nums]->[$weig] = $dp->[$nums - 1]->[$weig];
}
}
}
say $dp->[$n]->[$w];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment