- 新年趣事之打牌
- 2017-11-27 22:39:29 @
本来以为若存在唯一解,那么在记录前驱的时候只管直接记录就好
'''c++
for(int i = 1; i <= n; ++i)
for(int j = prefix[i]; j >= val[i]; --j)
if(dp[j - val[i]] != inf){
if(dp[j] == inf) dp[j] = dp[j - val[i]];
else dp[j] += dp[j - val[i]];
pre[j] = i;
}
'''
可是这样第四个点过不去
后来把路径记录修改一下就AC了,可是想不明白这是为什么
'''c++
for(int i = 1; i <= n; ++i)
for(int j = prefix[i]; j >= val[i]; --j)
if(dp[j - val[i]] != inf){
if(dp[j] == inf) dp[j] = dp[j - val[i]], pre[j] = i;
else dp[j] += dp[j - val[i]];
}
'''
请大神赐教
1 条评论
-
Cansult LV 8 @ 2017-11-29 18:47:39
这样会导致多个j的pre值都为i, 有可能会出现重复打印一张牌的情况
- 1