传送门:Sabotage题意:给定多个城市的网络,每个城市之间的通信有花费,要求使得首都和最大城市之间的通信断掉的最小花费。要求输出任意一组砸掉的边。分析:跑一遍最大流dinic后,根据最小割定理,整部图被分为S,T两部分,从源点出发dfs得到S集的点,剩下的为T集的点,然后输出左右两边各一个连着的...
分类:
其他好文 时间:
2015-02-17 22:17:33
阅读次数:
216
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3875分析:类似于spfa求最短路,设d[i]表示完全消灭i号怪物的最小花费,我们对d[]进行动态更新我们可以把问题反向:一开始所有怪物都存活,我们要找到一个怪物合成方案合成1号怪物,其中...
分类:
其他好文 时间:
2015-02-16 23:31:45
阅读次数:
389
1.题目描述:点击打开链接
2.解题思路:本题利用集合上的动态规划解决。定义集合s1表示恰好有一个人教的课程,集合s2表示至少有两个人教的课程。定义d(i,s1,s2)表示已经考虑了前i个人时的最小花费(人物编号从0开始)。则不难写出状态转移方程:
d(i,s1,s2)=min{d(i+1,s1',s2')+c[i],d(i+1,s1,s2)};
上式中只有当i≥m时才会考虑第二项。对于这个...
分类:
其他好文 时间:
2015-02-16 17:02:01
阅读次数:
142
题目链接:点击打开链接
题意:
给定n个城市和m条可选择修建的道路
下面n行给出每个城市的名字
下面m行给出每条道路及修建该道路的花费。
下面4行,每行给出一对城市。
目标:使得最后4行的每对城市连通(不同对之间可以不连通)所需要修建的最小花费。
数据保证存在可行解
思路:
首先如果这个问题问的是所有城市都连通,就是一个最小生成树的问题。
这里就相当于多个最小生成树的 问题。...
分类:
其他好文 时间:
2015-02-12 16:11:52
阅读次数:
245
题意:n张卡,可跳跃的长度l[i],以及花费c[i]
起始点为0,问如果选卡使得可以每个点都能跳到,最小的花费是多少。
思路:本质就是选取一些卡,选择卡长度的gcd为1,且花费最小。那么我们用map映射gcd值以及其对应的最小花费。最后输出mp[1]即可。(ps:可能有卡片长度相同)详见代码:
/********************************************...
分类:
其他好文 时间:
2015-02-04 18:43:44
阅读次数:
170
Codeforces Round #290 Div1 B
Problem
有一只青蛙在x轴上跳,起初在原点,现有N种跳跃技能可以购买,每技能有两属性:跳跃长度Li 以及 花费Ci。若购买了第 i 种技能,则可以从 y 位置跳跃到 y+Li 或者 y-Li 位置,但需花费Ci 元。求最小花费使得青蛙可以跳到每一个整数点上,若无法做到,输出-1。
Limits
Time Limit...
分类:
其他好文 时间:
2015-02-04 09:29:05
阅读次数:
133
题目链接:点击打开链接
题意:
给定n个点的有根树(0为根),
下面给出边和边权
一个整数q表示q个询问
每个询问一个数字x ,表示有一个人从根开始走,行走距离不超过x且使得走过不相同的点最多。
问最多能走多少个点。
思路:
dp[i][j][0]表示以i为根的子树,以i为起点走了j个不同点且回到i的最小花费。
dp[i][j][1]表示不需要回到i的最小花费。
转移的时候就是...
分类:
其他好文 时间:
2015-02-02 19:56:18
阅读次数:
239
区间dp还是要想想的,不看题解不明白重要的性质,如果第i个人第k个出栈,那么后面的人出栈顺序都大于kdp[i][j]表示从第i个人到第j个人这段区间的最小花费(是只考虑这j-i+1个人,不需要考虑前面有多少人)那么对于dp[i][j]的第i个人,就有可能第1个上场,也可以第j-i+1个上场。考虑第K...
分类:
其他好文 时间:
2015-02-02 13:53:57
阅读次数:
178
题目大意:给出一个平面图,这个平面图中分布着一些点,可以用平面图中的边将一些点围住,问围住k个点的最小花费是多少。
思路:这题重点是平面图转对偶图。做法不难理解。先将所有的边拆成两条,枚举所有的边,若这个边没有被标记过,那么就对这条边进行搜索,弄出来以这个边为一边的平面区域,可以顺时针或者逆时针。将所有边挂在这条边的起点上,在所有点上按照每条边的极角排序,每次找的时候找大于(或小于)当前...
分类:
其他好文 时间:
2015-01-28 09:57:22
阅读次数:
358
定义dp[i][j]表示第i天到达城市j的最小花费
则
dp[i][j]=min(dp[i-1][next(j)]+cost(next(j),j))
当然不是每天都会有飞机的,需要判断一下
代码如下:
#include
#include
#include
using namespace std;
int T[15][15],a[15][15][35];
int dp...
分类:
其他好文 时间:
2015-01-24 14:29:49
阅读次数:
119