0%

这段时间关注了香港发生的一系列事件,尽力解除了各方面人士的说法,最近形成了自己的想法,为防止忘记,特做此文章。这篇文章主要关于价值观和政治立场,和香港反送中事件不做过多评论。详细、公正的信息可以在维基百科上面看到。

维基百科:反对《逃犯条例》修订草案运动,俗称反送中运动[26]、反修例运动[27]及反引渡条例修订[28][29],是指在香港包括各种游行、集会、占领街道、占领立法机关、围堵行政部门与警察总部、不合作运动、学校联署运动、国际媒体登广告、轻生等一系列抗议香港政府提出的逃犯条例修订草案的行动。游行、集会与示威亦传播至32个海外城市[30]。事件被视为香港政府自六七暴动以来最大的管治危机。

我对于香港这次事件的看法是漂泊不定的。一开始接触到是在YouTube了解到的,评论员说这次事件有逃犯条例作为导火索,有额外的政治经济因素。第二天猜想这件事毫无疑问会被官方虚假报道或者屏蔽,果然是这样的。后来从一些微信推送上了解到,官媒对这件事情有完全不同的定义和腔调,表示香港这次运动属于暴乱、港独和被外媒操纵。

在大陆地区真理部的封杀下,国内媒体不报道(似乎是现状,包括搜索引擎屏蔽、删帖、审查等)、虚假报道(包括但不限于故意低估游行人数、编造虚假新闻)、宣传特定政治立场、片面报道等。大陆有一些分析过于片面,官媒定性为“暴乱、台独、受到境外势力操纵”。Youtube上面很多频道都有自己的特定的立场,也存在相对客观的报道,不同频道说法区别很大,评论区互相攻击(知真相者?、粉红、五毛、利益相关)。外媒和YouTube的反应差不多,不多说了。不同立场的人说辞不一,由此可见不同的主体是存在政治立场和思想方向的不同的。

以上属于媒体和政府的反应,但网民的反应更让我大吃一惊。和一些同学和朋友的聊天中,我发现他们对于这件事几乎是一无所知,毫无疑问真理部做得很好。由于国内已经禁止讨论这件事情,我从墙外、漏网的QQ群、公众号的评论区等地方了解到了不同的人的反应。多数网民是完全没有知晓这件事的或者对政治不关心,少数网民没有完全了解这件事情的,并且受到了误导,还有一些网民有一些自己的偏见。只有很少数的网民和网站是客观中立的。

我从这段时间的香港时间中有了新的见解:所有社会现象都是复杂的,但我们不应低估社会本身的复杂性。社会必然充满了利益之争,不同的人要为自己的利益发声,这是可以理解的,但不应该被特定的利益相关所引导。被引导和收买的人会进一步发言,甚至掩盖不同的观点。

考试结束之后手误点了取消成绩(本来以为是不发送成绩单),又忘记了恢复成绩,等到该出分的时候,傻眼了,也过了10天的恢复时间。 发邮件询问后,得知可以在30天以内恢复(在NEEA网站上写着是10天,而在ETS官网上面写着60天),后来打电话进一步解决了问题。 这种情况应该分情况讨论: - 10天以内——直接在平台上交费点击恢复成绩的按钮即可,然后填写成绩单寄送地址。 - 11-30天——交费后,联系托福NEEA(工作日 (0)10-82345672 考试日 (0)10-61957815 Email ibtcsr@mail.neea.edu.cn),让对方生成一个恢复成绩的按钮,几分钟后点击按钮,然后填写成绩单寄送地址。 - 31-60天——这种情况应该非常棘手,我没有遇见过,不如再考一次。 - 60+ ——早做什么去了。

在听力水平的提高过程中,最没有效果的就是刷题,刷题不能保证自己的能力的提升,因为题目只能作为一种对于英语听力能力的检测,刷题只能训练做这种检测题的熟练程度。所以要在本质上入手,就是提高听力的辨音能力和理解能力、理解速度。

按照程序员的说法,听力训练于人,就像那听力材料作为训练数据来训练神经网络模型,大量的训练才会有好的效果。由于人脑神经元数目过于庞大,无法产生过拟合的效果。同样,由于人脑的每一个神经元都可以是并行的,所以精确度可以远超过神经网络而速度更快。

我尝试过三种据说是有效的听力训练方式,基础都是精听,即重复多次听+反馈。经过长时间的使用,利弊如下:

听写 跟读 复述
时间 最花费时间,如果用纸笔,一篇5分钟的lecture需要3-4节课来听写+比对 最省时间 中等
优势 效果最好,能够清晰记录自己的错误和失误,不给自己可以抵触的机会。 可以锻炼口语、发音 锻炼自己的理解能力
缺点 时间过长 不能保证精确性,容易口干舌燥 同样不适合抓细节,容易口干舌燥

在三种方式中,我最推崇的是听写,尽管时间过长,容易枯燥无味,但这种方式最能保证自己的练习效果,而且不会影响他人。试想一下,如果有一些懈怠的情绪,跟读和复述的时候就会心不在焉,草草地完成,只是在浪费时间。听写就不一样了,无论状态多差,纸和笔是不能欺骗别人的,哪怕是自己,都可以得到理想的训练效果。

自从初三开始,我已经陆陆续续学习托福了,到现在高二,已经接近三年时间。中间却因为各种事情,几次放下托福,又捡起托福。中考、奥赛、文化课、以及正式决定出国的时间相对较晚,导致托福没有大的长进。如今正式决定出国,并学习托福几个月,其中有大喜也有大悲,一周仿佛是一年,这种感觉是从来没有过的。今天突然有一些感想,谨以记之。

学习托福最重要的是能力的提升。托福毕竟还是语言考试,考察的是英语的实际能力,而且将来要出国,没有英语能力是不行的。一开始,还是为自己的托福分数患得患失,惶惶不可终日,若考好,考不好,则大喜大悲。这样就导致了厌烦做题的心理,每天满足于做一点题目,浅尝辄止,实在是不利于英语能力的提高。后来发现了这一点,但并没有真正体会到。今天在知乎上面看别人的回答,他提及了赵襄主学御的故事,这如醍醐灌顶一般点醒了我。多日以来,我过多地关注与题目本身,没有切实提高自己的能力,而这,是于托福的要求是背道而驰的。还是在知乎上,我搜索高考的事情,一个答主回答:“出来成绩以后,我不回去看,自己什么水平自己都知道,看排名只会空空增加压力。” 大概也是印证了这一点。

阅读方面,我的弱点是长难句和词汇。很久以前已经背过两次托福词汇了,所以我在整个寒假没有碰过词汇书,春节期间的时间也没有利用起来,很是惭愧,也后悔。后来的某一天,我分析了自己在阅读方面的不足,发现最大的拦路虎竟然是词汇。后来开始背第三遍单词,背了两个多星期,终于完成,再做起题目,满是惬意。我发现了背单词的好处,正在着手背第四遍单词,这一次,相当于每个list背两次,将来,要结合记忆曲线来记忆。这些变化,印证了托福考察的是能力的提升,而不是做题技巧甚至运气。

我没有走出自己的舒适区,而是满足于已有的成就。先不细究舒适区是谁提出的,但是,舒适区的外面是学习区,这是必须知道的。人天生是贪图安逸享受的,也就是说,倾向于停留在舒适区。从舒适区走向学习区是极为痛苦的,而这个痛苦无法避免,除非停止学习。这一点可以作为验证是否处于学习区的重要方法。

我给自己列了表格,规定了每天学习的任务。可惜的是,这学习规划执行地并不严格,也不充实、不细致,甚至经常出现空余时间过长或者时间不够用的状况。听力明明可以听很多,我却只听1-2篇,除了因为对成绩患得患失,也是因为没有走出舒适区的意愿。痛苦越大,收获越多。

长时间来,没有找到适应于自己的合适的方法。这一点并非我的错,网上的各种方法,看起来都很好,但是可操作性不同,我对他们的理解不同,有尝试过的、有没尝试过的,但直到最近,也没有完全形成自己的学习方法。

我没有区分开刻意练习与重复机械练习。刻意练习,意味着把自己层层扒开,直面自己的最弱点,然后根据这个去有针对性地训练。着意味着直面的不是自己的可怜的分数,而是自己能力上的缺陷,需要十足的心理素质和拼搏的决心和勇气;这也意味着走出舒适区,切实地学习,这个过程是痛苦的。机械重复练习,就是在舒适区里无脑地练习,空会增加熟练度,却不能学到新的内容。分开这两点极为重要,我练习听力的过程是一个极好的例子。我买来MP3,每天中午都要听一些听力材料,甚至开到2倍的速度,但并没有对这些内容进行思考,并且只限于这些,这属于机械重复练习西,由于一些原因这些范听练习的效率非常低,耽误了学习进程。我开始尝试听写,听写了一个多星期,每天一篇听力题目的内容,觉得自己的英语水平提高了,但是没能坚持下来。原因如下:听写内容过于无聊,本身难以坚持;听写只限于写出已知的内容,在文章的结构和新内容学习方面帮助不大;听写效率较低,难以跟上学习进度,难以产生成就感。听写确实处于学习区,可惜也有一些缺点,是否再捡起来,还有待考虑。在这篇文章中怎么在一个月内让英语听力有明显的提高? - 栗之的回答 - 知乎,答主提出了一个切实可行的Shadowing Practice,我要在接下来的时间中,从原来的计划中划出时间这样练习。

对于口语和写作,暂时不抱太大的希望,希望能够超过23分,也近似满足了要求。能做的,就是每天都要顾及到口语和写作。另外希望能抽出大块的时间,练习口语和写作,争取24/26分。

一言以蔽之,我有幸及时发现了自己的问题,即使距离首战托福还有17天,但还是可以弥补的,也为二战托福打下基础。

前言

之前一直在寻找onedrive business版本在linux上的客户端,无奈github上大部分程序都支持不完整,或者因为年代久远无法使用。后来看到了一篇介绍rclone的文章,在里面找到了rclone这一个神器。 # 安装 通过网络搜索,得到了rclone的项目地址https://github.com/ncw/rclone,根据里面的说明安装即可,不再赘述。 我偶然发现 archlinuxcn 源里面有这个软件,安装之。 # 配置 根据github上的说明,首先rclone config,然后根据提示操作。值得一说的是,rclone支持绝大部分国外的网盘,功能强大。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
 % rclone config                                                                                                                                       ~
2019/03/15 09:07:48 NOTICE: Config file "/home/jack/.config/rclone/rclone.conf" not found - using defaults
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
name> onedrive
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / A stackable unification remote, which can appear to merge the contents of several remotes
\ "union"
2 / Alias for a existing remote
\ "alias"
3 / Amazon Drive
\ "amazon cloud drive"
4 / Amazon S3 Compliant Storage Provider (AWS, Alibaba, Ceph, Digital Ocean, Dreamhost, IBM COS, Minio, etc)
\ "s3"
5 / Backblaze B2
\ "b2"
6 / Box
\ "box"
7 / Cache a remote
\ "cache"
8 / Dropbox
\ "dropbox"
9 / Encrypt/Decrypt a remote
\ "crypt"
10 / FTP Connection
\ "ftp"
11 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
12 / Google Drive
\ "drive"
13 / Hubic
\ "hubic"
14 / JottaCloud
\ "jottacloud"
15 / Local Disk
\ "local"
16 / Mega
\ "mega"
17 / Microsoft Azure Blob Storage
\ "azureblob"
18 / Microsoft OneDrive
\ "onedrive"
19 / OpenDrive
\ "opendrive"
20 / Openstack Swift (Rackspace Cloud Files, Memset Memstore, OVH)
\ "swift"
21 / Pcloud
\ "pcloud"
22 / QingCloud Object Storage
\ "qingstor"
23 / SSH/SFTP Connection
\ "sftp"
24 / Webdav
\ "webdav"
25 / Yandex Disk
\ "yandex"
26 / http Connection
\ "http"
Storage> 18
** See help for onedrive backend at: https://rclone.org/onedrive/ **

Microsoft App Client Id
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_id>
Microsoft App Client Secret
Leave blank normally.
Enter a string value. Press Enter for the default ("").
client_secret>
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Use auto config?
* Say Y if not sure
* Say N if you are working on a remote or headless machine
y) Yes
n) No
y/n> y
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth
Log in and authorize rclone for access
Waiting for code...
Got code
Choose a number from below, or type in an existing value
1 / OneDrive Personal or Business
\ "onedrive"
2 / Root Sharepoint site
\ "sharepoint"
3 / Type in driveID
\ "driveid"
4 / Type in SiteID
\ "siteid"
5 / Search a Sharepoint site
\ "search"
Your choice> 1
Found 1 drives, please select the one you want to use:
0: OneDrive (business) id=b!RmQbk3CnDEmlCXzTauIX
Chose drive to use:> 0
Found drive 'root' of type 'business', URL: https://vxxxxx.sharepoint.com/personal/xxxxxx_vlity_com/Documents
Is that okay?
y) Yes
n) No
y/n> y
--------------------
[onedrive] // 此处有删减
type = onedrive
token = {"access_token":"eyJ0eXAiOiJKCJub25jZSI6IkFRQUJBQUF","token_type":"Bearer","refresh_token":"OAQABAAAAAACEfexXxjamQ","expiry":"2019-03-15T10:09:38.262653506+08:00"}
drive_id = b!RmQbk3CnDEmlCXzTauIQb9
drive_type = business
--------------------
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y
Current remotes:

Name Type
==== ====
onedrive onedrive

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> q

# 常见命令 rclone sync srcpath destpath 其中如果是远程目录,可以用remotename:/remotepath代替 同步本地目录到远程目录,支持增量备份,但会删除src中不存在的文件。我监控过网速,上传是满速的

rclone copy srcpath destpath 其中如果是远程目录,可以用remotename:/remotepath代替 将srcpath复制到destpath,可以都是远程目录

rclone mount remotename:/remoutpath destpath 可以将远程目录映射为本地磁盘

nohup rclone mount remotename:/remoutpath destpath & ; exit 将远程目录映射为本地磁盘,后台运行

rclone lsl remote:path [flags] 列举远程目录的文件

输入rclone help可以得到下面的信息,我顺便翻译了一下。 输入rclone help xxx可以获得进一步的用法

`shell about Get quota information from the remote. 从远程获取配额信息。 authorize Remote authorization. 远程授权。 cachestats Print cache stats for a remote打印远程服务器的缓存状态 cat Concatenates any files and sends them to stdout. 连接所有文件并将其发送到stdout。 check Checks the files in the source and destination match. 检查源和目标中的文件是否匹配。 cleanup Clean up the remote if possible如果可能,清理遥控器 config Enter an interactive configuration session. 输入交互式配置会话。 copy Copy files from source to dest, skipping already copied将文件从源复制到目标,跳过已复制的文件 copyto Copy files from source to dest, skipping already copied将文件从源复制到目标,跳过已复制的文件 copyurl Copy url content to dest. 将URL内容复制到目标。 cryptcheck Cryptcheck checks the integrity of a crypted remote. 加密检查检查加密远程的完整性。 cryptdecode Cryptdecode returns unencrypted file names. cryptdecode返回未加密的文件名。 dbhashsum Produces a Dropbox hash file for all the objects in the path. 为路径中的所有对象生成Dropbox哈希文件。 dedupe Interactively find duplicate files and delete/rename them.以交互方式查找重复文件并删除/ 重命名它们。 delete Remove the contents of path. 删除路径的内容。 deletefile Remove a single file from remote. 从远程删除单个文件。 genautocomplete Output completion script for a given shell. 给定shell的输出完成脚本。 gendocs Output markdown docs for rclone to the directory supplied. 将rclone的降价文档输出到提供的目录。 hashsum Produces an hashsum file for all the objects in the path. 为路径中的所有对象生成hashsum文件。 help Show help for rclone commands, flags and backends. 显示rclone命令、标志和后端的帮助。 link Generate public link to file/folder.生成到文件/ 文件夹的公共链接。 listremotes List all the remotes in the config file. 列出配置文件中的所有远程设备。 ls List the objects in the path with size and path. 列出路径中具有大小和路径的对象。 lsd List all directories/containers/buckets in the path.列出路径中的所有目录/容器/ 存储桶。 lsf List directories and objects in remote:path formatted for parsing列出远程目录和对象:为解析格式化的路径 lsjson List directories and objects in the path in JSON format. 以JSON格式列出路径中的目录和对象。 lsl List the objects in path with modification time, size and path. 列出路径中的对象,包括修改时间、大小和路径。 md5sum Produces an md5sum file for all the objects in the path. 为路径中的所有对象生成MD5SUM文件。 mkdir Make the path if it does not already exist. 如果路径不存在,则创建该路径。 mount Mount the remote as file system on a mountpoint. 将远程作为文件系统安装到安装点上。 move Move files from source to dest. 将文件从源移动到目标。 moveto Move file or directory from source to dest. 将文件或目录从源移动到目标。 ncdu Explore a remote with a text based user interface. 使用基于文本的用户界面浏览远程。 obscure Obscure password for use in the rclone.conf在rclone. conf中使用的密码模糊 purge Remove the path and all of its contents. 删除路径及其所有内容。 rc Run a command against a running rclone. 对正在运行的rclone运行命令。 rcat Copies standard input to file on remote. 将标准输入复制到远程文件。 rcd Run rclone listening to remote control commands only. 运行rclone,仅收听遥控命令。 rmdir Remove the path if empty. 如果路径为空,则删除该路径。 rmdirs Remove empty directories under the path. 删除路径下的空目录。 serve Serve a remote over a protocol. 通过协议提供远程服务。 settier Changes storage class/tier of objects in remote.更改远程对象的存储类/ 层。 sha1sum Produces an sha1sum file for all the objects in the path. 为路径中的所有对象生成sha1sum文件。 size Prints the total size and number of objects in remote:path.打印remote: path中对象的总大小和数目。 sync Make source and dest identical, modifying destination only. 使源和目标相同,仅修改目标。 touch Create new file or change file modification time. 创建新文件或更改文件修改时间。 tree List the contents of the remote in a tree like fashion. 以树形方式列出遥控器的内容。 version Show the version number. 显示版本号。 ```

最近几天调了PS CS6,感觉使用起来还不错,解决了几个大坑,分享之。 ## 第一步是配置wine环境。 我推荐使用playonlinux,这可以认为是crossover的开源版本,上面甚至有qq 8.9版本(没有测试过)。

1
yaourt -S playonlinux

下载PS CS6安装包

在网上下载PS CS6的安装包,还有破解补丁。实际上绿色版的也可以,不过按照playonlinux的知道,用原版安装包是最好的。解压备用

安装和配置

打开playonlinux的页面,安装,搜索photoshop。第一次会比较慢,要耐心等待。然后根据提示安装即可。要手动破解。 它会给你安装上wine 3.4(这个会很慢,视网速)和其他一些库,不过是只能用在自己的wine中的,大概有gecko mono ... 记录下来,后续会用到(如果你需要用独立显卡) 之后会给系统打一些补丁,都是自动的。

关于中文

黑框

参考这篇: http://www.linuxdiyf.com/linux/23474.html 不过似乎只需要做以下的就可以了。然后拷贝一份宋体字体,到wine的相应目录中

搜索: FontSubstitutes 找到的行应该是:[Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes] 将其中的: “MS Shell Dlg”=”Tahoma” “MS Shell Dlg 2″=”Tahoma” 改为: “MS Shell Dlg”=”SimSun” “MS Shell Dlg 2″=”SimSun”

输入法

中文输入法的解决方法是通用的。如果是搜狗输入法,在启动脚本里添加以下内容。启动脚本在设置的最后一页,或者那个shotcut里的都可以:~/.PlayOnLinux/shotcuts/Adobe Photoshop CS6

1
2
3
export XMODIFIERS="@im=fcitx"
export GTK_IM_MODULE="fcitx"
export QT_IM_MODULE="fcitx"

关于独立显卡

独立显卡需要手动开启。找到~/.PlayOnLinux/shotcuts/Adobe Photoshop CS6,把最后一行换成 optirun wine Photoshop.exe "$@"。因为原有的POL_wine可能有问题,所以需要自己再安装一个wine。 我用的是aur里的wine-staging 4.0 ,别的版本按理说也可以。然后安装好之前记忆的一些gecko mono...。 如果不想这么麻烦,可以安装某个游戏版本的wine,这个在aur里面有很多,关键词是wine game

某些系统(如manjaro)可能会出现winebus.sys的错误,参考 https://forum.manjaro.org/t/playonlinux-help/20558 解决。 > 需要安装 lib32-libldap

经过多次折腾,本站终于换上了com域名,之前用过的域名有gker.cc, jachhack.top。现在是https://jeekrs.com/ 估计长时间内是不会再次更换的 ## 绝对不要用小众域名。 比如说top域名,看似很火,数量很多,但是整个百度只收录了不到一百个页面。cc域名还好一些,但是绝对不如com和cn。com,cn,net的权重可能差不多,具体没有测试过也无从得知。

能备案就备案

百度对于备案后的新站有十分不错的收录政策,所以应该尽可能备案。备案后服务器可以在国内安放,速度也会相应提升很多。 - [ ] 这项还没有做

manjaro的17 版本安装起来有问题,最近看到manjaro更新了18版本,就试了一下,感觉非常好,把原来的debian删掉了。

踩坑如下: 联想笔记本部分系列没有wifi硬开关,而且是默认关闭的,一般需要禁用ideapad_laptop模块。但是在manjaro上面,禁用后会导致笔记本自带的键盘和触摸板无法使用,就没有采用这种方法,上网寻求相关信息,没有找到。后来发现wicd可以绕过这个限制,就凑合用了一段时间。群里有人告诉我,禁用掉ideapd_laptop可以用,也会出现那种情况,但是重启之后就会正常。尝试后确实如此。

没有分配swap文件和分区,导致无法休眠。

待机后可能会导致无法唤醒,正在想办法解决

这是一道状压dp的题目。似乎这道题简洁明了的做法还没有,那么我就来简单地给出一份还可以的代码。详见代码。 很显然,我们按照长条状考虑,每列算一个阶段,每个阶段只与前一个有关。每个阶段有5*(k+1)个状态,对应形状和已选矩阵数量。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <bits/stdc++.h>;
using namespace std;
const int N = 110, M = 3, K = 11;
int dp[N][K][5];
int a[N][M];
int main()
{
int n, m, k;
cin >;>; n >;>; m >;>; k;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
cin >;>; a[i][j];

memset(dp, 0xa0, sizeof dp);
dp[0][0][0] = 0;
for (int i = 1; i <= n; ++i)
{
for (int kk = 0; kk <= k; ++kk)
{
// 0 不选
for (int s = 0; s <= 4; ++s)
dp[i][kk][0] = max(dp[i][kk][0], dp[i - 1][kk][s]);
// 可以从任意状态转移来

// 1 上 2 下
for (int w = 1; w <= 2; ++w)
{
if (kk)
for (int s = 0; s <= 4; ++s)
dp[i][kk][w] = max(dp[i][kk][w], dp[i - 1][kk - 1][s] + a[i][w]);
// 从上方某个状态转移来,花费1次数

dp[i][kk][w] = max(dp[i][kk][w], dp[i - 1][kk][w] + a[i][w]);
dp[i][kk][w] = max(dp[i][kk][w], dp[i - 1][kk][4] + a[i][w]);
// 这是不花费多余次数的
}
// 3 上下整体
if (kk)
for (int s = 0; s <= 4; ++s)
dp[i][kk][3] = max(dp[i][kk][3], dp[i - 1][kk - 1][s] + a[i][1] + a[i][2]);

dp[i][kk][3] = max(dp[i][kk][3], dp[i - 1][kk][3] + a[i][1] + a[i][2]);

// 4 上下分开
dp[i][kk][4] = max(dp[i][kk][4], dp[i - 1][kk][4] + a[i][1] + a[i][2]);
if (kk)
{
if (kk >;= 2)
for (int s = 0; s <= 4; ++s)
dp[i][kk][4] = max(dp[i][kk][4], dp[i - 1][kk - 2][s] + a[i][1] + a[i][2]);
// 继承2个
dp[i][kk][4] = max(dp[i][kk][4], dp[i - 1][kk - 1][1] + a[i][1] + a[i][2]);
dp[i][kk][4] = max(dp[i][kk][4], dp[i - 1][kk - 1][2] + a[i][1] + a[i][2]);
// 继承1个
}
}
}

int ans = 0xa0a0a0a0;
for (int kk = 0; kk <= 4; ++kk)
ans = max(ans, dp[n][k][kk]);
cout << ans << endl;
}

比较显然,从根节点出发,并不方便做题,所以要颠倒关系,然后就有了树型dp。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <bits/stdc++.h>
using namespace std;

const int N = 1e6+5;
struct edge{
int t, w;
};
vector<edge> g[N];
int tot;
int dfs(int i, int fa)
{
int mmax = 0;
for(edge &e : g[i])
{
if(e.t == fa) continue;
e.w += dfs(e.t, i);
mmax = max(mmax, e.w);
}
for(edge &e : g[i])
{
if(e.t == fa) continue;
tot += mmax - e.w;
}
return mmax;
}

int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
int s;
cin >> s;
for(int i = 1; i <= n - 1; ++i)
{
int a, b, w;
cin >> a >> b >> w;
g[a].push_back(edge{b, w});
g[b].push_back(edge{a, w});
}
int ans = dfs(s, 0);
cout << tot << endl;
}