摘要: 题意: 有n 个人走在一条路上,其中一些人可能是一个组的,每个人都说出了自己所在组前方的人数和后方的人数,问最多有多少人说的是真话。分析: dp[i][j] 表示从第 i +1 个人到第 j 个人为一组时的最优值 t[i][j] 表示描述中从第 i +1 个人到第 j 个人为一组的数量 注意的是: t[i][j]的值不可能超过 n-(j-i+1) s[i]保存以第 i 个人为结尾的最优值 转移方程: dp[i][j]=s[i]+t[i][j] s[j] = max (s[j],dp[i][j])#include<stdio.h>#include<string.h>#de 阅读全文
posted @ 2012-09-18 09:38 'wind 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 题意: 有n个城市,有个小偷想从其中一个城市逃到另一个城市,警察想要堵截这个小偷,知道了在每个城市堵截的成本,问如何安排在哪些城市堵截可以使得 小偷一定会被抓住,而且成本最低。分析: 最小割模型,城市有成本限制,需要差点来限制,具体建图方法: 将每个城市 i 拆成两个点 i 和 i + n, 之间连一条容量为该点花费的边,如果 城市 a 和 b 连通,则在 a+n 和 b, b+n 和 a 之间连一条容量为无穷的的边, 这样可以保证最大流量即花费仅受到顶点容量的限制, 如果 起点为 S ,终点为 D ,求出 点S 到 点 D+n 的最大流即为满足条件的最小割。#include<stdio 阅读全文
posted @ 2012-09-18 09:08 'wind 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 题意:给出 n 个木板的重量值和长度 然后每个木板的PDV = 压在他上面的木板的重量值之和-该木板的长度值求所有木板中PDV值最大的最小给出一个 n 表示木板的数量接下来 n 行表示每块木板的重量值和长度值求PDV最大的最小分析:①如果排序为 a b 则a的PDV = sum-wb b的PDV = sum+wa-sb②如果排序为 b a 则b的PDV = sum-sb a的PDV = sum+wb-sa要想第一种方法要想最大值的PDV < 第二种方法最大值则 wa+sa < wb+sb所以排序然后找这种最优方法中的最大值#include<stdio.h>#includ 阅读全文
posted @ 2012-09-18 08:47 'wind 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 题意: 有连续 n 个操作,一开始集合为空,对应有三种操作: add x :如果x 不在集合中,加入 x 到集合中 del x: 如果x 在集合中,删除之 sum: 集合中存在的数排好序之后输出满足 序号%5=3 的数值的和分析:每个区间维护两个数组num[i] i 区间内部不同数值的个数 s[i][5] i 区间内部数值序号对 5 取模后各种情况的和#include<stdio.h>#include<string.h>#include<map>#include<algorithm>using namespace std;#define maxn 阅读全文
posted @ 2012-09-18 08:37 'wind 阅读(162) 评论(0) 推荐(0) 编辑