Contents

ARST打卡第248周

lc1690_石子游戏 VII 【TED演讲】相信自己的三步指南 判断磁盘是ssd还是hdd Execl表格数据和Readme格式互换,以及execl对比底色区分

Algorithm

lc1690_石子游戏 VII

思路: 这题示例一比较友好,告知了不能简单地让两人每轮都最大得分贪心。

Bob贪心应该是自己拿什么,能让Alice下一轮的贪心拿得更少。

Alice的贪心应该是自己拿什么,让Bob下一轮拿什么都能获得最大差值。

每轮贪心也不一定是最优的吧?能拿到全局最优吗?

25分钟还没想出来,还是看 题解学习一下,提高效率。

题解通过记忆DFS来保证局部最优构造成全局最优,学习之。

题解描述先手用Bob描述的,但是这里其实还是Alice先手,最终返回dfs最大差值。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
    int stoneGameVII(vector<int>& stones) {
        int n = stones.size();
        vector<int> sum(n + 1);
        vector<vector<int>> memo(n, vector<int>(n, 0));
        for (int i = 0; i < n; i++) {
            sum[i + 1] = sum[i] + stones[i];
        }

        function<int(int, int)> dfs = [&](int i, int j) -> int {
            if (i >= j) {
                return 0;
            }
            if (memo[i][j] != 0) {
                return memo[i][j];
            }
            int res = max(sum[j + 1] - sum[i + 1] - dfs(i + 1, j), sum[j] - sum[i] - dfs(i, j - 1));
            memo[i][j] = res;
            return res;
        };
        return dfs(0, n - 1);
    }
};

记忆搜索DFS总是能转成dp的。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
    int stoneGameVII(vector<int>& stones) {
        int n = stones.size();
        vector<int> sum(n + 1);
        vector<vector<int>> dp(n, vector<int>(n, 0));

        for (int i = 0; i < n; i++) {
            sum[i + 1] = sum[i] + stones[i];
        }
        for (int i = n - 2; i >= 0; i--) {
            for (int j = i + 1; j < n; j++) {
                dp[i][j] = max(sum[j + 1] - sum[i + 1] - dp[i + 1][j], sum[j] - sum[i] - dp[i][j - 1]);
            }
        }

        return dp[0][n - 1];
    }
};

Review

【TED演讲】相信自己的三步指南

这文化很美国,自信主义,而不是人生机会主义。

不过自信的人确实更容易抓住机会。

如果没有找到自己一生的事业,那就不断尝试;如果找到了,那就不断努力;相信自己也能创造一些让世界更美好的事物。

永远相信自己,爱自己,永远不放弃自己。

Tips

判断磁盘是ssd还是hdd

有可转显示为1的是hdd,没有可转显示的是ssd。

1
2
3
4
5
# cat /sys/block/sda/queue/rotational
1

# cat /sys/block/nvme0n1/queue/rotational
0

Share

Execl表格数据和Readme格式互换,以及execl对比底色区分

Execl表格数据和Readme格式互换

Readme格式的表格可以直接用预览工具获得表格,然后复制粘贴到 Excel 即可。

而Execl复制到 Readme 文档的数据有 tab。 可以通过 vim 来做替换。

就是选中对应的行 :'<,'>s/\t/ | /g 替换一下即可。 这里的技巧是全部复制完,然后再替换,结合 . 来复制各个行.

execl对比底色区分

execl里面可以把结果改成百分比格式,然后再选中所有数据项中设置条件格式,创建下面2个条件格式

=C6 > 0正数为绿色,=C6 < 0负数为红色。

注意

  • C6 为表格中要对比的数据中的一个。
  • 选中数据需要按ctrl多选中几行。因为规则是只对选中的地方生效。而且无法格式刷复制到其他地方。