算法题
文章平均质量分 61
母函数、动态规划&数位、、AC自动机等
observadores
这个作者很懒,什么都没留下…
展开
-
poj 1113 Wall
题意:国王要建一座墙围住国王所有的城堡,要求墙上任意一点到城堡的距离大于L,同时墙的长度最短。输出墙的长度(四舍五入)。 墙的长度 = 城堡的点构成的凸包的长度 + 以L为半径的圆的周长 黑色的是城堡连接成的凸包,外围黄色的部分是墙,顶点上 是圆弧#include <iostream>#include <algorithm>#include <cmath>using namespace s原创 2016-08-27 19:28:07 · 348 阅读 · 0 评论 -
poj 1228 Grandpa's Estate
题意:判断给出的点组成的凸包是不是稳定凸包稳定土包:凸包的每条边上至少有三个点题意略难理解..............#include #include #include #include using namespace std;const int MAXN = 10005;struct node{ double x,y;}p[MAXN];in原创 2016-08-27 17:05:08 · 421 阅读 · 0 评论 -
poj 3348 Cows
题意:给出若干点的位置,计算由这些点组成凸包的面积S(农场面积),每头牛至少要50平方米,所以输出S/50的整数部分即可计算凸包面积n边形可以划成n-2个三角形已知三角形顶点坐标,求三角形面积最直接的公式设A(x1,y1),B(x2,y2),C(x3,y3)在坐标系中中顺序为三点按逆时针排列S=1/2[(x1y2-x2y1)+(x2y3-x3y2)+原创 2016-08-26 20:23:29 · 354 阅读 · 0 评论 -
poj 1873 The Fortified Forest
题意:n棵树 xi, yi, vi, li 给出每棵树的位置( xi, yi ),价值vi, 砍了这棵树能造多长 的围墙 li n最大只有15,所以直接采用枚举满足条件 砍了的树足够将剩下的数围起来(凸包),输出 剩下的树的价值和最大的方案。存在多种方案时,输出,剩下的树最少的方案Forest 1Cut these trees: 砍了哪些树E原创 2016-08-24 16:20:54 · 276 阅读 · 0 评论 -
poj 2007 凸包 极角排序
//double atan2( double y, double x );//y/x的反正切值,结合计算所在的象限。 //是一个弧度值,要换算成角度,也必须乘以180/PI。//奇怪的是把数据类型由doule改为int就过了//#include #include #include #include #include #include using name原创 2016-08-24 15:52:55 · 228 阅读 · 0 评论 -
zoj 3430 AC自动机
题目链接:http://acm.hust.edu.cn/vjudge/problem/visitOriginUrl.action?id=16400把输入的字符根据下表,转化成value数字,在转化成6位的二进制,载8个二进制一组划分,转化成0~255的数字(ASCII字符的十进制),然后就是AC自动机模版的事了。一个=表示转化得到的二进制末尾要去掉2个0Value原创 2016-04-24 22:56:32 · 237 阅读 · 0 评论 -
poj 3252
题目链接:http://poj.org/problem?id=3252题意:给定范围l,r;求有多少个数的二进制0的个数大于等于1的个数#include #include #include using namespace std;typedef __int64 ll;int num[40];ll dp[40][40][40];//dp[len][zero][o原创 2016-02-27 20:41:53 · 249 阅读 · 0 评论 -
hdu 4352
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4352看最后一段就够了一个数的力量是这个原创 2016-04-17 20:52:34 · 277 阅读 · 0 评论 -
hdu 4507
题目链接:需要维护三个数 个数count,满足条件数的和sum,数的平方和square;一个数 = (a*10的pre次方+b);b一个数的平方 = (a*10的pre次方*a*10的pre次方 + 2*a*10的pre次方*b + b*b);len时(len-1的数在nxt中)count : 直接加nxt.cnt;sum :加nxt.sum(对应b)原创 2016-02-24 21:08:10 · 340 阅读 · 0 评论 -
codeforces 55D
题目链接:http://codeforces.com/problemset/problem/55/D需要维护三个数 个数count,满足条件数的和sum,数的平方和square;一个数 = (a*10的pre次方+b);b一个数的平方 = (a*10的pre次方*a*10的pre次方 + 2*a*10的pre次方*b + b*b);len时(len-1的数在nxt中)原创 2016-02-24 19:34:26 · 279 阅读 · 0 评论 -
hdu 4509
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4509#include #include using namespace std;int num[1450];int main(){ int a,b,c,d; int n,r,ans,i; while(~scanf("%d",&n)) {原创 2016-02-06 20:37:57 · 497 阅读 · 0 评论 -
HDU 1398
less than 300会出现300的数据所以开大点.....#include using namespace std;int cl[1000],c2[1000];int main(){ int n; int i,j,k; while(cin>>n,n) { for(i = 0;i <= n; i++)原创 2015-06-07 16:50:29 · 232 阅读 · 0 评论 -
hdu 1050
将走廊设为一个1到200的空间room1到room5,则空间1,2,3占用,统计各个空间被占用的次数sort 降序取最大的*10输出#include #include #include using namespace std;bool cmp(int a,int b){ return a>b;}int main(){ int t,n; int s,e原创 2015-05-30 09:50:36 · 237 阅读 · 0 评论 -
NOJ 1002 将军问题
将军,5种可能:1,将对帅2兵 三个点3炮 同行或同列的第二个(从将的位置发散)4马 4个蹩脚点,一个蹩脚点对应两个落脚点5车 同行同列的第一个#include using namespace std;int map[15][15];int jiang(int x1,int x2,int y){ int i; for( i = x1 + 1; i原创 2015-05-24 00:21:17 · 411 阅读 · 0 评论 -
light 1005 - Rooks
题意: n行n列,放置k颗棋子的方案数,棋子不能放在同行同列n行先拿出k行(无顺序)(n!)(n−k)!∗k!\frac{(n!)}{(n-k)!*k!} 每行有n列 ,每列放一个(有顺序)(n!)(n−k)!\frac{(n!)}{(n-k)!} 两个分式相乘整理可得((n!)(n−k)!)2∗1k!\left(\frac{(n!)}{(n-k)!}\right)^2*\frac{1}{k!原创 2016-08-24 21:28:13 · 294 阅读 · 0 评论 -
light 1011 - Marriage Ceremonies
dp[][]#include #include #include #include #include using namespace std;int map[20][20];int n;int dp[20][66000];int main(){ int t;原创 2016-08-26 20:49:02 · 270 阅读 · 0 评论 -
light oj 1004 - Monkey Banana Problem
数塔n行之前 dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + 数塔上的数; i行第j个n行至后,dp[n+i][j] = max(dp[n+i-1][j], dp[n+i-1][j+1]) + 数塔上的数;#include #include #include using namespace std原创 2016-06-02 10:42:07 · 276 阅读 · 0 评论 -
poj 2991 线段树 成段更新 + 向量旋转
题目链接:http://poj.org/problem?id=2991输入数据:n条线段,c条指令n条线段的长度li(最初的线段都是在y轴上的)c条的指令是s,a,表示第s条线段和第s+1条线段的夹角调整为a度每执行完一条命令输出最后一条线段末尾的坐标注意:输出的时候,c++中用%lf,g++中用%f。keep[maxn]保存第i条边与i-1边的夹角(初始化为180原创 2016-12-04 22:21:20 · 322 阅读 · 0 评论 -
poj 3311 floyd + 状态
题目链接:http://poj.org/problem?id=3311先Floyd处理了,变成tsp问题if(k == 0)tem = 0;else tem = (1dp[i+tem][k] = min(dp[i+tem][k],dp[i][j]+map[j][k]);//由这次状态写出下次的#include #include #define inf 0x7原创 2015-12-01 23:09:19 · 253 阅读 · 0 评论 -
hdu 1502 大数dp
题目链接:转移方程#include #include char dp[65][65][65][80];int i,j,k;int max(int a,int b){ if(a > b) return a; return b;}void add(char a[],char b[],char c[]){ int len1,原创 2015-11-19 21:07:07 · 817 阅读 · 0 评论 -
hdu 3008
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3008InputThere are several test cases,intergers n ,t and q (00) in the first line which mean you own n kinds of skills ,and the "ResumingCircle原创 2015-11-16 23:19:38 · 765 阅读 · 0 评论 -
hdu 1501
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1501题意:判断能不能由前前两段字符组成第三段字符转移方程: dp[i][j] = (dp[i][j-1]&&str2[j-1]==str3[i+j-1]) || (dp[i-1][j] && str1[i-1]==str3[i+j-1]))str1[]的前I个字符和str2[]的前j个原创 2015-11-16 23:12:16 · 292 阅读 · 0 评论 -
hdu 1224
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1224题意:求最长上升子序列,有路径限制#include #include int dp[120];int map[120][120];int pre[120];int num[120];void p(int x){ if(pre[x] == 1) {原创 2015-11-13 20:29:32 · 262 阅读 · 0 评论 -
hdu 1081(最大子矩阵和)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081先求每列第一个元素到每个元素的和 s[i][j] = s[i-1][j] + num[i][j];在求第i行到 j 行的每列的和(1每求出一组t[n],求一次最大字段和#include #include int s[110][110];int num[11原创 2015-11-04 21:36:01 · 309 阅读 · 0 评论 -
hdu 1114 多重背包
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1114#include #define max 0x3f3f3f3f//大一点,不然有wa的可能int dp[10010];int num[510][2];int min(int a,int b){ return a<b?a:b;}int main(){ int te原创 2015-10-30 16:34:12 · 207 阅读 · 0 评论 -
hdu 1058
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058题意:由有限个2,3,5,7相乘得到的数,从小到大排序。听说这个不过的要去找英语老师#include #include #include using namespace std;int num[6000];int main(){ int a,b,c,d; in原创 2015-10-29 19:09:25 · 315 阅读 · 0 评论 -
hdu 2571
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2571题意:从点(1,1)走到(n,m),走的每个格子都有数据,格子相加的数据最大。#include #include #include int num[25][1010];int dp[25][1010];int main(){ int t,n,m;原创 2015-10-11 20:49:19 · 302 阅读 · 0 评论 -
hdu 2602
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602题意:简单的01背包,每个物品都有大小和价值,问在V的背包能装下的最大价值转移方才:dp[j] = max(dp[j],dp[j-v[i]]+value[i]);#include #include #include int dp[1010];int value[101原创 2015-10-11 12:10:49 · 230 阅读 · 0 评论 -
hud 1505
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1505题意:二维的1506,求最大全 F 矩阵的面积。求出每个点F向上连续的的高度,然后一行行求每行最大连续的值原创 2015-10-10 17:27:49 · 231 阅读 · 0 评论 -
hdu 1506
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506题意:求最大能截取的面积用动态规划求,每块木板向左(向右)方向上,连续大于等于自己长度的最左(右)边的木板,记录编号遍历所有木板求(right[i] - left[i])*num[i]的最大值,输出;注意:木板的长度 要用long long或者_int64num 2 1原创 2015-10-10 16:37:29 · 268 阅读 · 0 评论 -
hdu 1231
第1行给出正整数K( 输出最大和、最大连续子序列的第一个和最后一个元dp[i] = max(dp[i-1]+num[i],num[i])#include #include using namespace std;int dp[10010];int num[10010];int s[10010];int main(){ int i,k,flag;原创 2015-10-09 22:05:14 · 214 阅读 · 0 评论 -
hdu1028
#include #include using namespace std;int c1[130],c2[130];int main(){ int n; int i,j,k; while(cin>>n) { memset(c1,0,sizeof(c1)); memset(c2,0,sizeof(c2));原创 2015-06-12 01:04:58 · 271 阅读 · 0 评论 -
hdu 1171
#include #include #include using namespace std;int c1[2600000],c2[2600000];int main(){int n;int v,m;int i,j,k;int sum;while(scanf("%d",&n),n>=0){scanf("%d%d",&v,&原创 2015-06-12 00:41:09 · 259 阅读 · 0 评论