結果
| 問題 |
No.15 カタログショッピング
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-05-21 02:43:12 |
| 言語 | Go (1.23.4) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,214 bytes |
| コンパイル時間 | 11,194 ms |
| コンパイル使用メモリ | 223,832 KB |
| 実行使用メモリ | 814,668 KB |
| 最終ジャッジ日時 | 2024-10-11 01:11:59 |
| 合計ジャッジ時間 | 19,418 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 MLE * 1 -- * 4 |
ソースコード
package main
import (
"fmt"
"reflect"
"sort"
"strconv"
"strings"
)
func in(i int, l []int) bool {
for _, j := range l {
if i == j {
return true
}
}
return false
}
func lin(l []int, L [][]int) bool {
for _, i := range L {
if reflect.DeepEqual(l, i) {
return true
}
}
return false
}
func conv(l []int) string {
s := make([]string, len(l))
for i := range l {
l[i]++
s[i] = strconv.Itoa(l[i])
}
return strings.Join(s, " ")
}
func main() {
var N, S int
fmt.Scan(&N, &S)
P := make([]int, N)
for i := range P {
fmt.Scan(&P[i])
}
dp := make([][][]int, S+1)
for i := range P {
if P[i] > S {
continue
}
dp[P[i]] = append(dp[P[i]], []int{i})
}
for p := 0; p <= S; p++ {
for j := range dp[p] {
for i := range P {
if p+P[i] > S {
continue
}
if in(i, dp[p][j]) {
continue
}
tmp := make([]int, len(dp[p][j]))
copy(tmp, dp[p][j])
tmp = append(tmp, i)
sort.Ints(tmp)
if lin(tmp, dp[p+P[i]]) {
continue
}
dp[p+P[i]] = append(dp[p+P[i]], tmp)
}
}
}
out := make([]string, len(dp[S]))
for i := range dp[S] {
out[i] = conv(dp[S][i])
}
sort.Strings(out)
for _, s := range out {
fmt.Println(s)
}
}