- 博客(35)
- 收藏
- 关注
原创 UVA 11021 Tribles
题目链接题意:给你K个毛球,每个毛球只能生存一天,但是每个毛球都有pi的概率繁殖i个毛球,问第 m 天后所有毛球死亡的概率。分析:因为毛球独立,所以考虑一个最后取k次幂即可。所以dp[i]=∑pj*dp[i-1]^j (0<=j#include<cstdio>#include<cstring>#include<algorithm>using namespace std;double pow(
2016-08-18 20:27:06
294
原创 UVA 11427 Expect the Expected
题目链接题意:每晚打游戏。每晚中,赢一局概率p,最多玩n局,如果最后不能保证胜率大于p,则从此不玩。问打游戏的天数的期望。分析:设dp[i][j]为玩i盘赢j局的概率。则有dp[i][j]=dp[i-1][j]*(1-p)+dp[i-1][j-1]*p; 则总概率为q=∑dp[n][k].则期望为1/q;#include<cstdio>#include<algorithm>#include<c
2016-08-18 20:21:50
286
原创 UVA 11722 Joining with Friend
题目链接题意: 两个人坐火车, 在某个城市到站的时间段分别为[t1, t2] , [s1, s2],停在站台的时间均为w,问两人能见面的概率。分析:高中的线性规划问题。总可能为S=(s2-s1)*(t2-t1);又停站时间为w所以|x-y|<=w,所以范围为t1<=x<=t2,s1<=y<=s2,|x-y|<=w所围成的面积。除一下即可。#include<cstdio>#include<algo
2016-08-18 20:15:49
470
原创 UVA 11762 Race to 1
题目链接题意:给定一个数N, 要你从小于等于N的素数中找出能够给N整除的素因子, 即该素数可以被N整除, 使得新的N = N/prime[i], 数N=N除以该素因子得到新的N, 知道N=1为止, 现在要你求出平均情况下随机选素数的次数的期望.分析:概率dp+记忆化搜索。设dp[i]为i的期望,fac为素因子的数量,tot为素数数量,,则dp[i]=1+(1-fac/tot)*dp[i]+Σdp[i
2016-08-18 20:10:04
278
原创 SCU 2113 数字游戏
题目链接题意:字面意思。。。分析:把环断成链,然后dp,dp[i][j]表示把前i个数划分成j部分。转移方程dp[i][k]=max{dp[j][k-1]*(s[i]-s[j-1])}.枚举每种断链可能。#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 55#define MAX_M 12#define in
2016-08-05 21:55:13
455
原创 POJ 1949 Chores
题目链接题意:有n个任务,每个任务k可能与之前任务有关,就是说只有当其所有的先前任务完成时,这个任务才可以开始,有给定了每个任务的执行时间,求要完成所有的任务,最少需要多少时间。分析:简单dp。d[i]表示完成第i件任务时的最短时间。dp[i]应该等于完成之前优先任务的最大时间。#include<cstdio>#include<algorithm>#include<cstring>using
2016-08-05 21:50:56
271
原创 POJ 1724 ROADS
题目链接题意:找花费不超过k的最短路。分析:dijkstra+优先队列+bfs#include<cstdio>#include<algorithm>#include<vector>#include<iostream>#include<functional>#include<cstring>#include<queue>#define MAX_V 105#define inf 1000
2016-08-05 21:42:09
295
原创 POJ 1161 Walls
题目链接题意:给定一些城市,若干成员在不同城市,城市间城墙相连,找一个区域,使成员集合时穿过的城墙最少。分析:floyd+建图。以区域为节点,城墙为边建图。因为题目给定的包围区域的点是顺时针的,所以,如果区域a有边AB,区域b有边BA,那么a,b必相邻。#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 255#
2016-08-05 21:37:54
282
原创 HDU 2087 剪花布条
题目链接题意:问一个A串可以剪多少个B串。分析:kmp水题#include<cstdio>#include<algorithm>#include<cstring>#define MAX_P 1005#define MAX_T 1005using namespace std;char P[MAX_P];char T[MAX_T];int NEXT[MAX_P];int cnt;vo
2016-08-05 21:31:48
256
原创 HDU 1686 Oulipo
题目链接题意:问一个主串包含多少个模式串分析:kmp模板题#include<cstdio>#include<algorithm>#include<cstring>#define MAX_P 10005#define MAX_T 1000005using namespace std;char P[MAX_P];char T[MAX_T];int NEXT[MAX_P];int cnt
2016-08-05 21:28:31
243
原创 HDU 1711 Number Sequence
题目链接题意:在主串中寻找第一个包含模式串的的位置。分析:裸kmp#include<cstdio>#include<algorithm>#include<cstring>#define MAX_P 10005#define MAX_T 1000005using namespace std;int P[MAX_P];int T[MAX_T];int NEXT[MAX_P];int n
2016-08-05 21:25:40
226
原创 HDU 3461 Code Lock
题目链接题意:这题看得好久才看懂。。。意思是给定长度为n的锁,给定m个区间,转动m个区间的密码会同时增1,问有几种不同的锁。分析:并查集+快速幂,合并区间,计算区间数cnt,答案就是26^(n-cnt)#include<stdio.h>#include<algorithm>#define N 10000005#define mod 1000000007using namespace std;
2016-08-04 20:31:46
256
原创 HDU 2807 The Shortest Path
题目链接题意:给定几所城市,每个城市可以表示成矩阵,如果A*B=C,则表明城市A到B有路径,且长为1.给定若干询问,判断询问城市是否连通?分析:这题数据水。。暴力即可。//1014ms#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 85#define inf 0x3f3f3f3fusing namespac
2016-08-04 20:27:00
260
原创 SCU 2818 QQ音速
题目链接题意:字面意思。。。分析:可以考虑贪心,每次考虑最优,同优的情况往后走看走哪个会返回原来的出发点。 也可以考虑动规。用dp[i][j][k]表示第k次操作时左手在i 右手在j时所消耗的能量。 dp[i][j][k]=Min(dp[t][j][k-1]+w[t][i],dp[i][t][k-1]+w[t][j]);//贪心 #include<cstdio>#include<algorit
2016-08-03 20:29:14
572
原创 HDU 3938 Portal
题目链接题意:一张无向图,求有多少条路径使得路径上的花费小于L,这里路径上的花费是这样规定的,a、b两点之间的多条路径中的最长的边最小值。分析:并查集+离线处理。按最小生成树的思想,按边权值由小到大排。对于询问按问的l由小到大排,最后复原回去。当边权值小于询问值就合并边的两端点。用r[k]记录树的节点数。两颗树合并成一棵树时, 将会增加r[a]*r[b]条路径。#include<stdio.h>#
2016-08-03 20:20:44
255
原创 HDU 3631 Shortest Path
题目链接题意:给定一张图,求过给定的点的最短路。分析:floyd算法,中间节点k只取标记过的#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 305#define MAX_M 100005#define MAX_Q 100005#define inf 0x3f3f3f3fusing namespace s
2016-08-03 20:10:00
302
原创 HDU 2066 一个人的旅行
题目链接题意:中文题。。。分析:floyd算法,删减dp[i][k] inf的边 优化避免超时#include<cstdio>#include<cstring>#include<algorithm>#define inf 0x3f3f3f3f#define N 1001using namespace std;int dp[N][N];int dd[N];void floyd(int
2016-08-03 20:06:50
247
原创 SCU 2111 littleken bg
题目链接题意:中文题。。。分析:裸的01背包。不过重量和价值是一样而已。#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 35#define MAX_M 205using namespace std;int dp[MAX_N][MAX_M];int a[MAX_N];int main(void){
2016-08-03 19:46:55
274
原创 POJ 2253 Frogger
题目链接题意:从0号点,到1号点,找一条能通过的路,使得这条路中的最大的边,比其它所有可能的路中的边都小。分析:用floyd算法求两点最短值。再求出从每个点开始的最长路,最后从这n个最长路中求出最小的那个即为所求。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#define MAX_N 205using
2016-08-02 20:36:36
446
原创 POJ 1201 Intervals
题目链接题意:从一系列区间[a_i,b_i]中至少取出c_i个数构成集合s,求s的最小size分析:差分约束系统,化成图后求最大路径,SPFA#include<cstdio>#include<algorithm>#include<vector> #include<queue>#include<cstring>#include<iostream>#define MAX_V 50005#d
2016-08-02 20:32:29
225
原创 POJ 1274 The Perfect Stall
题目链接题意:N头牛M个牛栏,每头牛只愿独占特定几个牛栏,求最大分配。分析:裸的匈牙利算法。#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int match[205],map[205][205],n,m;bool used[205];int dfs(int x){ for(int i
2016-08-02 20:29:00
242
原创 POJ 2236 Wireless Network
题目链接题意:距离d内的两台电脑互联。现在通过修理和查看操作,求查看时两台电脑是否互联?分析:这是并查集的基本应用,两台修好的电脑若距离d内则加入合并。#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 1005using namespace std;struct node{ int x,y;}co
2016-08-02 20:25:59
265
原创 POJ 1125 Stockbroker Grapevine
题目链接题意:求谣言传递的最短时间。分析:floyd,之后找最短时间就可以了#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 105#define inf 0x3f3f3f3fusing namespace std;int n;int dp[MAX_N][MAX_N];void warshall_flo
2016-08-02 20:23:05
207
原创 POJ 2472 106 miles to Chicago
题目链接题意:给定一张图,每条路有一定权值,代表不会被抓到的概率。求概率最大值。分析:对概率取对数后再去负号,相当于求最短路。裸的dijkstra.#include<stdio.h>#include <iomanip>#include<iostream>#include<cmath>using namespace std;const int MAX_N = 100;const doubl
2016-08-02 20:18:37
308
原创 POJ 1191 棋盘分割
??????:????????????:?????????sigma(xi^2)?????dp[x1][y1][x2][y2][k]???(x1,y1)?(x2,y2 )??????k????????????? dp[k][x1][y1][x2][y2]=min(min(dp[k][x1][y1][x2][y2],dp[k-1][x1][y1][t][y2]+dp[0][t+1][y1][x2][
2016-08-02 00:01:29
229
原创 POJ 1141 Brackets Sequence
题目链接题意:给定字符串,问输出用插入最少的括号使之合法的字符串。分析:dp[i][j] 表示i到j需要插入的括号数,v[i][j]表示需要插入的位置,v[i][j]=-1表示不需要插入,如果str[i]==str[j],dp[i][j]=dp[i+1][j-1],v[i][j]=-1; 否则dp[i][j]=min(dp[i][k],dp[k+1][j]),i<=k#include<cstdi
2016-08-01 23:54:48
212
原创 SCU 2096 Maximum Submatrix
题目链接题意:找矩阵的全为0的子矩阵,使其最大。分析:dp[i][j]表示在第i行以mat[i][j]=0结尾的连续0的数量。若mat[i][j]=1,dp[i][j]=0。然后对列扫一遍看对应行数最多多少。#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 105using namespace std;int
2016-08-01 23:50:52
275
原创 SCU 1685 Chopsticks
[题目链接]http://acm.hdu.edu.cn/showproblem.php?pid=1500题意:有N支筷子,要凑出K+8套的三支筷子,其中A<=B<=C,筷子 (A-B)^2称为badness,求最小的总badness。分析:先变成非递增序列,因为要保证有一个最大的C在每一组里面。dp[i][j]表示第i个人第j个筷子。dp[i][j]=min(dp[i-1][j],dp[i-1][
2016-08-01 23:42:38
250
原创 POJ 1065 Wooden Sticks
题目链接题意:给定一些木棒,已知长度和质量,需要一个机器处理这些木棒,机器开启的时候需要耗费一个单位的时间,如果第i+1个木棒的重量和长度都大于等于第i个处理的木棒,那么将不会耗费时间,否则需要消耗一个单位的时间。分析:贪心,求非减子序列的数量。。。先按长度递增排序,如果长度一致就按重量递增排序。按顺序扫一遍,从没标记的开始扫,将扫过的木棒标记,扫完所有木棒。#include<cstdio>#in
2016-08-01 23:34:05
278
原创 POJ 2184 Cow Exhibition
题目链接题意:给出n头奶牛的s和f值,要求在这几头奶牛中选出若干头,使得在其总s值ts和总f值tf均不为负的前提下,求最大的ts+tf值分析:类比01背包,s为体积,f为重量,但因为s为负,所以以1000*n为起点,范围2*1000*n,s为正要顺序,负要逆序。#include<cstdio>#include<algorithm>#include<cstring>#define inf 0x3
2016-08-01 21:03:56
244
原创 Gym 100971G Repair
题目链接题意:问能否从一个 a * b 的纸上裁剪出 a1*b1 和 a2*b2 的纸板。分析:4种情况每种考虑下。。。水题。。。#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int main(void){ int a,b,a1,b1,a2,b2; while(scanf("
2016-07-31 14:20:49
329
原创 Gym 100971F Two Points
题目链接题意:给定两点,及它们各自的运功方向,求最小距离。分析:初中数学。。。把直线参数方程求出,再套两点距离公式,二次函数求最值问题。#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int main(void){ int x1,y1,x2,y2;
2016-07-31 14:09:46
503
原创 Gym 100971C Triangles
题目链接题意:给定n个数,问是否存在一个数,使得这个数与该数列的任意2个组成一个非退化的三角形(即三角形面积不为0)。分析:简单的三角不等式|a-b|#include<cstdio>#include<algorithm>#include<cstring>#define MAX_N 200005using namespace std;bool comp(const int a,const i
2016-07-31 13:52:54
453
原创 Gym 100971B Derangement
[题目链接]http://codeforces.com/gym/100971/problem/B题意:就是给定一个排列,问最少交换次数,使得该排列没有 fixed point。分析:记录是 fixed point的元素,该元素总数为cnt,如果cnt是1的话,那么只要交换一次,然后从剩下的随便找个数和这个元素交换就可以。如果cnt>1,分2种,如果是偶数,交换次数就是cnt/2,交换方法就是相邻两
2016-07-31 13:41:13
582
原创 Gym 100971A Treasure Island
题目链接 题目字面意思是让?变成 . 或#,使得 . 可以连成一片,唯一就把图输出,不唯一就输出Ambiguous,否则Impossible. 先将所有的 . dfs遍历一遍,记录有几块相连的陆地数k,并记录扫过的格子数cnt_s,途中遇到的?就把它当成 . ,如果有没遇到的?说明被#包围,则这个?一定为#。遍历完后,如果k>1,那么肯定是Imossible,如果k为1,再把dfs过程中
2016-07-31 13:11:59
392
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人