03 2014 档案

摘要:题目:你可以有v1元,v2代金券,v3个物品免单,现在有n个商品,商品能用纸币或者代金券购买,当然你可以买v3个商品免费。问怎么最大能买多少价值题意:思路二维背包,dp[v1][v2][v3]=MAX(dp[v1-n.a][v2][v3]+n.value,dp[v1][v2-n.b][v3]+n.value,dp[v1][v2][v3-1]+n.value)#include #include#includeusing namespace std;int dp[110][110][6];struct node{ int value; int a; int b;}bla[110];int main 阅读全文
posted @ 2014-03-31 22:25 Teemo的技术blog 阅读(138) 评论(0) 推荐(0)
摘要:题意:给你n个坐标,求最远的两点距离思路:用凸包算法求处,各个定点,再用旋转凸包卡壳#include #include #include #include using namespace std;#define N 50010struct node{ int x,y,d;}p[N]; int dist(node a,node b){ return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); }int crossproduct(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a 阅读全文
posted @ 2014-03-29 13:26 Teemo的技术blog 阅读(136) 评论(0) 推荐(0)
摘要:题意:略思路:直接套用凸包模板#include #include #include #include using namespace std;#define N 50010struct node{ int x,y,d;}p[N]; int dist(node a,node b){ return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); }int crossproduct(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);}bool cmp1(node a,node 阅读全文
posted @ 2014-03-29 13:19 Teemo的技术blog 阅读(152) 评论(0) 推荐(0)
摘要:题意:略思路:套用ac自动机模板#include #include#includeusing namespace std;char str[11000];int total,head,tail;struct node{ node *next[130]; node *fail; int cnt,id; node(){ fail=NULL; cnt=0; memset(next,NULL,sizeof(next)); }}*q[500000]; void insert(node *root,int id){ node *p=root; int i=0,index; while(str[i])... 阅读全文
posted @ 2014-03-28 21:30 Teemo的技术blog 阅读(118) 评论(0) 推荐(0)
摘要:题意:需要学够n学分,有k个情况(x学分,y个相同学分的课)解法:套母函数模板#include #includeusing namespace std; int main(int argc, char** argv) { int i,j,k,t,sum; int c1[10000],c2[10000],num[120],n,m,x[120],y[120]; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&m); sum=0; for(i=0;i<m;i++){ scanf(" 阅读全文
posted @ 2014-03-27 10:23 Teemo的技术blog 阅读(125) 评论(0) 推荐(0)
摘要:Robberieshttp://acm.hdu.edu.cn/showproblem.php?pid=2955背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱最脑残的是把总的概率以为是抢N家银行的概率之和…把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋);正确的方程是:f[j]=max(f[j],f[j-q[i].money]*q[i].v)其中,f[j]表示抢j块大洋的最大的逃脱概率,条件是f[j-q[i].money]可达,也就是之前抢劫过;始化为:f[0]=1,其 阅读全文
posted @ 2014-03-16 16:13 Teemo的技术blog 阅读(161) 评论(0) 推荐(0)
摘要:题意:问按规则排成的串有多少个A(c)>= B(c) >= C(c)思路:因为写大整数太累,就偷懒了一下直接用java水过import java.math.BigInteger;import java.util.Scanner;public class Main { public static void main(String[] args){ BigInteger [][][]dp=new BigInteger [65][65][65]; dp[0][0][0]=BigInteger.ONE; for(int i=1;ij)dp[i][j][k]=dp[i][j][k].add( 阅读全文
posted @ 2014-03-15 23:28 Teemo的技术blog 阅读(113) 评论(0) 推荐(0)
摘要:一、活动图的组成元素Activity Diagram Element1、活动状态图(Activity)2、动作状态(Actions)3、动作状态约束(Action Constraints)4、动作流(Control Flow)5、开始节点(Initial Node)6、终止节点(Final Node)7、对象(Objects)8、数据存储对象(DataStore)9、对象流(Object Flows)10、分支与合并(Decision and Merge Nodes)11、分叉与汇合(Fork and Join Nodes)12、异常处理(Exception Handler)13、活动中断区域 阅读全文
posted @ 2014-03-14 18:21 Teemo的技术blog 阅读(326) 评论(0) 推荐(0)
摘要:题意:n个陪审团,每个陪审团有x,y值,选出m个陪审团,要求 (sum(xi)-sum(yi))最少,当(sum(xi)-sum(yi))最少有多个,取sum(xi)+sum(yi)最大那个,并顺序输出陪审团的序号思路:先x-y,x+y存起来,再按当dp[i][j],j相同时,要值最大,当然存路径是最烦的。#include #include#include #includeusing namespace std;#define N 210int path[25][1000],map[25][1000],n,m,sub[25*10],plusa[25*10],size,ans[25];int m 阅读全文
posted @ 2014-03-10 21:43 Teemo的技术blog 阅读(116) 评论(0) 推荐(0)
摘要:题意:略思路:此题陷阱超多,当##,#*,*#时不能走进去,套下模板就行了。#include #include#include#includeusing namespace std;#define N 20struct node{ int x,y,z; int step;}pri;int next[][2]={{1,0},{0,1},{-1,0},{0,-1}};char map[2][N][N];int n,m,time;bool vis[2][N][N];bool check(node a){ if(a.x>=0&&a.x=0&&a.yq; node 阅读全文
posted @ 2014-03-09 20:54 Teemo的技术blog 阅读(106) 评论(0) 推荐(0)
摘要:题意:你搬n个桌子,桌子从一个地方搬到另一个地方,走廊只允许同时一个桌子通过,教室分布在两边,奇数在一边,偶数在一边,当桌子不冲突时可以同时搬运,冲突时要等别的那个桌子搬完再搬。思路:因为奇数桌子在偶数对面,当奇数时会与偶数冲突,直接把奇数+1,变成偶数就可以很简单判断出有没冲突,再判断那个位置冲突最多,就是最后的结果。#include#include#include#includeusing namespace std;#define N 410int main(int argc, char** argv) { int room[N],a[N],b[N],t,ans,n,i,j,tmp... 阅读全文
posted @ 2014-03-06 13:02 Teemo的技术blog 阅读(124) 评论(0) 推荐(0)
摘要:题意:将木棍放在机器里处理,第一根需要一分钟,剩余的如果大于等于前边放入的长度和重量,就不用费时间,否则需要一分钟,计算给出一组数的最少时间。思路:先按长度排序,相同在比较重量,然后按顺序比较得出结果#include#includeusing namespace std;const int maxn=5010;struct stick{ int length; int weight; bool vis;}s[maxn];bool cmp(stick s1,stick s2){ if(s1.length=weight) { ... 阅读全文
posted @ 2014-03-05 23:08 Teemo的技术blog 阅读(112) 评论(0) 推荐(0)
摘要:题意:给你n个房子的距离,问那个房子离别的房子的距离最近,并且输出与别的房子距离的总和思路:排序一下,中间的房子离别房子距离必然是最少的。#include #include#include#includeusing namespace std;#define N 510int house[N];int main(int argc, char** argv) { int n,t,i,sum,m; scanf("%d",&t); while(t--){ scanf("%d",&n); for(i=1;i<=n;i++) scanf(&q 阅读全文
posted @ 2014-03-05 22:10 Teemo的技术blog 阅读(115) 评论(0) 推荐(0)
摘要:题意:求任意两点之间的距离的最少一个距离思路:枚举一下就可以了#include #include#includeusing namespace std;#define N 10010struct node{ double x,y;}p[N];int main(int argc, char** argv) { int n,i,j; double mdist,tmp; while(scanf("%d",&n)&&n){ for(i=0;i=10000) printf("INFINITY\n"); else printf("% 阅读全文
posted @ 2014-03-04 23:06 Teemo的技术blog 阅读(77) 评论(0) 推荐(0)
摘要:#include #include #include #define eps 1e-8#define zero(x) (((x)>0?(x):-(x)) eps;}//判两点在线段异侧,点在线段上返回0bool opposite_side(point p1, point p2, line l){ return xmult(l.a, p1, l.b)*xmult(l.a, p2, l.b) eps) return distance(p, l.a) eps) return distance(p, l.a) = pi + pi) dlng -= pi + pi; if (dlng > p 阅读全文
posted @ 2014-03-02 21:47 Teemo的技术blog 阅读(137) 评论(0) 推荐(0)
摘要:题意:把一个包放入另一个包内,使得总共要带的件数最少,就是说大包可以装小包,且一个大包只能装一个小包,但是这个小包可以继续装更小的包。思路:因为相同大小的包不能互相装,所以最小数量就是有相同尺寸的包的最大数量.#include #include#include#includeusing namespace std;#define N 1000100int c[N],a[N];int main(int argc, char** argv) { int n,i,u,j; while(scanf("%d",&n)!=EOF&&n){ u=0; memset 阅读全文
posted @ 2014-03-01 17:25 Teemo的技术blog 阅读(194) 评论(0) 推荐(0)
摘要:题意:公司要你要完成N份任务,但是你是不可能全部完成的,所以需要雇佣别人来做,做到剩下M份时,自己再亲自出马。现在有个机构,有两种付费方式,第一种是每付A元帮你完成1份,第二种是每付B元帮你完成剩下任务的一半(rounding down)。思路:先算出每个的最少费用然后排序就行了,要注意的是当费用相等时,按名字的字典序排序#include #include#include#includeusing namespace std;#define N 100010struct node{ char name[110]; int sum;}p[N];bool cmp(node a, node b){ 阅读全文
posted @ 2014-03-01 16:37 Teemo的技术blog 阅读(145) 评论(0) 推荐(0)