- 博客(24)
- 收藏
- 关注
原创 wikioi 1048 石子归并
http://wikioi.com/problem/1048/ 有n堆石子排成一列,每堆石子有一个重量w[i], 每次合并可以合并相邻的两堆石子,一次合并的代价为两堆石子的重量和w[i]+w[i+1]。问安排怎样的合并顺序,能够使得总合并代价达到最小。 经典动归,(不能用贪心局部最优不代表全局最优) 合成一个新状态必定是原来2个状态来的 #include #include using
2013-12-06 21:46:20 509
原创 wikioi 1047 邮票面值设计
http://wikioi.com/problem/1047/ 同样感触很深的一道题,之前打表,后来自己写了一遍 具体就是用深搜找方案,用dp判断 一道很经典的dfs套dp,但是程序很多地方还需优化 void dfs(int num,int tk,int m)//当前数值,种数,估计能构成的最大值 { if(tk==k)//用到了第k种 { int cnt=check(m,tk);检查
2013-12-06 21:43:31 844
原创 wikioi 1046 旅行家的预算
http://wikioi.com/problem/1046/ 这道题感触很深,国庆前完全不敢动,之后一天状态来了就过了 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1
2013-12-06 21:40:24 817
原创 wikioi 1045 回文数
http://wikioi.com/problem/1045/ 其实就是道模拟题,按题意来就行了,想想哪些地方可以优化 #include #include #include #include using namespace std; char a[1000]; int s1[1000]; int s2[1000]; int s[1000]; int m; int step=0; int l;
2013-12-06 21:30:07 608
原创 wikioi 1044 拦截导弹
http://wikioi.com/problem/1044/ 但是以后每一发炮弹都不能高于前一发的高度 这句话其实是提示,第一个问题就是正向一边lis, 第二个问题其实可以发现如果之后有比前面高的必然要多一套,因此可以倒着来一遍lis #include int ans=0; int d[30]; int b[30]; int dd[30]; int rear=0; int cnt=2
2013-12-06 21:25:42 499
原创 wikioi 1043 方格取数
http://wikioi.com/problem/1043/ 当时写了2个dp分别,结果发现第一次最优不保证第二次最优 所以用一个dp,同时走 dp[i][j][k][l]=maxdp(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1],dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]); 到第一个取i,j这格,和第二个去k,l这格是由上
2013-12-06 21:09:40 520
原创 wikioi 1042 进制转换
http://wikioi.com/problem/1042/ 负进制(什么*****) int m=n; int k=0; int s; while(m!=0) { s=m/b; a[k]=m%b; if(m0&&a[k]!=0)//这时a[k]会变为负数
2013-12-06 21:00:02 628
原创 wikioi 1041 Car的旅行路线
http://wikioi.com/problem/1041/ 建图是关键机场通过铁路,城市有4个机场可以到达,可以出发 (告诉3个点有多个情况:1,2为对角,1,3为对角,2,3为对角) #include #include #include #include #include using namespace std; double map[110][5][110][5];//i的k1到j
2013-12-06 20:53:37 639
原创 wikioi 1040 统计单词个数
http://wikioi.com/problem/1040/ 字符串的题一向这么恶心. 就是到划分型dp #include #include #include using namespace std; int word[201][201], dp[201][201][41]; char c[21], w[6][10], c0[201], c1[201]; int d, p, k,
2013-12-06 20:39:59 584
原创 wikioi 1039 数的划分
http://wikioi.com/problem/1039/ 这道dp很不错(题解中有背包做法) 一个整数划分成k份且k>=2必定有一种方法中有1,分开这个1,另外的都是大于2的,这时都减1,于是又会出现分出1 if(i>=j) dp[i][j]=dp[i-j][j]+dp[i-1][j-1]; 得到关系式 #include int n,k; int dp[210][10]={0}
2013-12-05 22:09:03 557
原创 wikioi 1038 一元三次方程求解
http://wikioi.com/problem/1038/ 提示:记方程f(x)=0,若存在2个数x1和x2,且x1,f(x1)*f(x2),则在(x1,x2)之间一定有一个 根。 题目给了方法,正统二分(交了7次,二分真tm难) void find(double bit,double top,bool f1,bool f2) { if(top-bit<0.01) { prin
2013-12-05 21:58:36 679
原创 wikioi 1037 取数游戏
http://wikioi.com/problem/1037/ 有一个有趣得取数游戏。初始时,给出一个环,环上得每条边上都有一个非负整数。这些整数中至少有一个时0。然后,将一枚硬币放在环上得一个节点上。二个玩家就是以这个放硬币得节点为起点开始这个游戏,二人轮流取数,取数得规则如下: (1)选择硬币左边或右边得一条边,并且边上得数非0; (2)将这条边上
2013-12-05 21:51:35 771
原创 wikioi 1036 商务旅行
http://wikioi.com/problem/1036/ 由于n-1边连接n个点,所以不存在路径选择的问题,只能有一条路 而找2个点的距离就找到公共祖先的距离之和 #include #include #include #include #include #include using namespace std; int n,m; struct edge { int v,next,w;
2013-12-05 21:31:45 698
原创 wikioi 1029 遍历问题
http://wikioi.com/problem/1029/ 如果直接求个数,你可以先建立一棵树,然后寻找即可。 但是这个方法复杂度高,空间高,编程长度长。所以不建议使用这种方法 对于树的基础概念感觉很多不理解,先序就是先遍历根,接着左边,最后右边,中序中间遍历根,后序最后遍历根 这两个中一定有子序列是相同的 a[i+1]==b[j-1]如果这个成立,相当于有构
2013-12-04 21:57:41 616
原创 wikioi 1027 姓名与ID
http://wikioi.com/problem/1027/ 恶心的字符串!!! 一道二分图匹配 第一行是整数N,表示N个人,N 接下来的一行是N个人的ID,用一个空格分隔。 接下来的若干行是过程的记录:一个字母和一个字符串。字母是E、L或M中的一个。E表示进入房间,后面跟的字符串表示进来的人的姓名;L表示离开房间,后面跟的字符串表示离开的人的姓名;M表示回答询问,后面
2013-12-04 21:45:05 650
原创 wikioi 1026 逃跑的拉尔夫
http://wikioi.com/problem/1026/ 拉尔夫所开小车的初始位置用字符的“*”表示,且汽车能从初始位置通过。 汽车能向四个方向移动:向北(向上),向南(向下),向西(向左),向东(向右)。 拉尔夫所开小车的行动路线是通过一组给定的方向来描述的。在每个给定的方向,拉尔夫驾驶小车通过小镇上一个或更多的可行车地点。 输出文件应包含用R行表示的小镇的地图
2013-12-04 21:34:35 869
原创 wikioi 1025 选菜
http://wikioi.com/problem/1025/ 首先一定要买的是必选菜 对于同一种菜(无论是不是必选菜),小松最多只会选择1份 于是关键在判断 #include #include #include #include #include using namespace std; int n,k; int x; int dp[1010]; int is[110]; int v
2013-12-03 21:57:33 573
原创 wikioi 1023 GPA计算
http://wikioi.com/problem/1023/ 关键就是这个算式的理解 #include #include #include #include #include using namespace std; int n; double a,b; int main() { cin>>n; double t1=0.0,t2=0.0; for(int i=1;i<=n;i++)
2013-12-03 21:51:08 599
原创 wikioi 1022 覆盖
http://wikioi.com/problem/1022/ 一道二分图匹配,关键在于怎么建边,由题覆盖的为2个相连的陆地,我们可以看作是一块陆地和另一块陆地进行了匹配 于是就可以找到一个陆地,把这和四周的陆地进行加边,接下来就是匹配了 #include #include #include #include #include using namespace std;const int ma
2013-12-03 21:48:38 566
原创 wikioi 1021 玛丽卡
http://wikioi.com/problem/1021/ 根据题意,即求在删去任意一条边后的最小值中的最大值 枚举删哪条边肯定会超时,这是就需要优化 假设我们在没删除边时得到一组最短路路径,那么在删除路径以外的边不会改变最短路径也就不会改变答案了 于是我们只需要先一次最短路记录下此时的路径,在枚举删除边就行了 #include #include #include #include
2013-12-03 21:40:19 524
原创 wikioi 1020 孪生蜘蛛
http://wikioi.com/problem/1020/ 无下限的坑啊 题目要求选择两个点,使从任意一点到这两个点中的一个距离最小 首先注意“通道数目”是点数不是边数……读边的时候记的用EOF 用floyd计算每两点间的距离 然后三层for枚举两只蜘蛛在哪两个点,以及蛾子在哪个点,找最大值的最小值 #include #include #include
2013-12-01 22:11:20 741
原创 wikioi 1018 单词接龙 提高组 2000
http://wikioi.com/problem/1018/ 又是字符串(10次才过我容易么 = =) 用搜索(数据小)枚举每种情况 #include #include #include #include #include #include using namespace std; int n; char s[20+10][200+10]; int vis[20+10]; int con[
2013-12-01 22:07:41 701
原创 wikioi 1017 乘积最大 普及组 2000
http://wikioi.com/problem/1017/ 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时会有以下两种分法: 1) 3*12=36
2013-12-01 22:00:43 536
原创 wikioi 1016 税收与补贴 普及组 2000
http://wikioi.com/problem/1016/ 每样商品的价格越低,其销量就会相应增大。现已知某种商品的成本及其在若干价位上的销量(产品不会低于成本销售),并假设相邻价位间销量的变化是线性的且在价格高于给定的最高价位后,销量以某固定数值递减。(我们假设价格及销售量都是整数) 对于某些特殊商品,不可能完全由市场去调节其价格。这时候就需要政府以
2013-12-01 21:55:35 1417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人