摘要:
UVA_12297 在研究了好一阵子标程之后终于把标程的解体思路弄懂了,其实关键之处就在于标程给出的递推式:f(n, k) = f(n-k, k) + f(n-k, k-1) * 4 + f(n-k, k-2) * 6 + f(n-k, k-3) * 4 + f(n-k, k-4)。 这里f(n, k)表示用k张牌组成和为N的方案数,在递推的时候考虑一共有多少张1。①考虑有0张1:这时就相当于用k张没有任何限制的牌组成和为n-k,然后将每张牌的点数+1,这样自然就没有1了,这部分的方案数是f(n-k, k);②考虑有1张1:这时就相当于用k-1张没有任何限制的牌组成和为n-k,然后将每张牌.. 阅读全文
摘要:
CF_152E 这个题目只需要求一棵斯坦纳树,但是蛋疼的是需要打印路径,因此要多开一个数组记录路径。一种还算比较省事的记录路径的办法就是如果是spfa拓展出来的状态就用负数记录一下拓展的方向,如果是子树组合出来的状态就用正数记录一下其中一棵子树的点集状态,这样能很方便的求出另一棵子树的点集状态。#include<stdio.h>#include<string.h>#define MAXN 110#define ST 138#define MAXQ 256010#define INF 0x3f3f3f3fconst int Q = 256000;int dx[] = {- 阅读全文
摘要:
HDU_3311 我表示完全没看懂题意……膜拜看懂题意的各位大神,附一份“偷”来的题意: 【题目大意】 给定N个寺庙,和M个另外的地方。 然后给定点权,表示在这个点挖水井需要的代价。 再给定边权,为建造无向边i,j的代价。 然后求怎样弄最小的代价使得前N个点,就是寺庙都能得到水。 这个和一般的斯坦纳树的题目不同的地方在于挖井要加点权,但是仔细分析一下不难发现,如果1-N作为斯坦纳树的叶子节点一共有两种状态,要么挖井要么不挖井,而其他点做为叶子节点只有一种状态,就是必须挖井,否则由于这个节点就可以被删去就一定不会是最优的方案。在dp之前如果将这些叶子节点的状态都初始化好的话,后面的... 阅读全文