HDU
佐佐木乌诺
希望能和大家一起学习哦~
展开
-
HDU2546.饭卡动态规划(01背包:动态规划分支限界回溯
Problem Description电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。Input多组数据。对于每组数据:第一行为正整数n,表示菜的数量。n<=1000。第二行包括n个正整数,表示每种菜的价原创 2021-07-24 16:07:19 · 338 阅读 · 0 评论 -
HDU2545树上战争(并查集简要
Problem Description给一棵树,如果树上的某个节点被某个人占据,则它的所有儿子都被占据,lxh和pfz初始时分别站在两个节点上,谁当前所在的点被另一个人占据,他就输了比赛,问谁能获胜Input输入包含多组数据每组第一行包含两个数N,M(N,M<=100000),N表示树的节点数,M表示询问数,N=M=0表示输入结束。节点的编号为1到N。接下来N-1行,每行2个整数A,B(1<=A,B<=N),表示编号为A的节点是编号为B的节点的父亲接下来M行,每行有2个数原创 2021-07-23 20:10:37 · 122 阅读 · 0 评论 -
欧拉函数,HDU1286找新朋友
剩余类:全体整数按其对m同余的数归为一类完全剩余系:在每个对模m同余的剩余类选出一个数构成拥有m个元素的集合简化剩余系:在模m的每个剩余类中取出一个和m互质的数构成的集合 (一个剩余类中的数要么都和m互质要么都不互质)把对模m的简化剩余系的元素个数成为m的欧拉函数,记为Φ(m)Φ(1)取值是0还是1由题判断。将m分解质因数,令所有质因数为p1、p2…pnΦ(m)=m*∏(1-1/pi)一个个数去求欧拉函数过慢,有一个较好的筛法:设arr[11],arr[1]=1,arr[2]=2…a原创 2021-07-19 17:58:41 · 196 阅读 · 0 评论 -
HDU2523.SORT AGAIN
Problem Description给你N个整数,x1,x2…xn,任取两个整数组合得到|xi-xj|,(0<i,j<=N,i!=j)。现在请你计算第K大的组合数是哪个(一个组合数为第K大是指有K-1个不同的组合数小于它)。Input输入数据首先包含一个正整数C,表示包含C组测试用例.每组测试数据的第一行包含两个整数N,K。(1<N<=1000,0<K<=2000)接下去一行包含N个整数,代表x1,x2…xn。(0<=xi<=2000)原创 2021-07-17 20:22:59 · 89 阅读 · 0 评论 -
2522.A simple problem (1/n的处理)
Problem DescriptionZty很痴迷数学问题.。一天,yifenfei出了个数学题想难倒他,让他回答1 / n。但Zty却回答不了_. 请大家编程帮助他.Input第一行整数T,表示测试组数。后面T行,每行一个整数 n (1<=|n|<=10^5).Output输出1/n. (是循环小数的,只输出第一个循环节).Sample Input4237168Sample Output0.50.30.1428570.005952380思路原创 2021-07-17 18:06:01 · 151 阅读 · 0 评论 -
2521.反素数(水题
Problem Description反素数就是满足对于任意i(0<i<x),都有g(i)<g(x),(g(x)是x的因子个数),则x为一个反素数。现在给你一个整数区间[a,b],请你求出该区间的x使g(x)最大。Input第一行输入n,接下来n行测试数据输入包括a,b, 1<=a<=b<=5000,表示闭区间[a,b].Output输出为一个整数,为该区间因子最多的数.如果满足条件有多个,则输出其中最小的数.Sample Input32原创 2021-07-17 15:54:22 · 190 阅读 · 0 评论 -
2502.月之数(组合题,注意有小坑
Problem Description当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数。如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数。所有的n二进制数中,1的总个数被称为n对应的月之数。例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。Input给你一个整数T,表示输入数据的组数,接下来原创 2021-07-17 14:29:20 · 121 阅读 · 0 评论 -
2519.新生晚会(简单的组合题
Problem Description开学了,杭电又迎来了好多新生。ACMer想为新生准备一个节目。来报名要表演节目的人很多,多达N个,但是只需要从这N个人中选M个就够了,一共有多少种选择方法?Input数据的第一行包括一个正整数T,接下来有T组数据,每组数据占一行。每组数据包含两个整数N(来报名的人数,1<=N<=30),M(节目需要的人数0<=M<=30)Output每组数据输出一个整数,每个输出占一行Sample Input53 25 34原创 2021-07-17 14:24:28 · 91 阅读 · 0 评论 -
HDU1518.Square(剪枝
Problem DescriptionGiven a set of sticks of various lengths, is it possible to join them end-to-end to form a square?InputThe first line of input contains N, the number of test cases. Each test case begins with an integer 4 <= M <= 20, the numb原创 2021-07-15 19:20:34 · 91 阅读 · 0 评论 -
1702.ACboy needs your help again!(队列&&栈
Problem DescriptionACboy was kidnapped!!he miss his mother very much and is very scare now.You can’t image how dark the room he was put into is, so poor ????.As a smart ACMer, you want to get ACboy out of the monster’s labyrinth.But when you arrive at原创 2021-07-14 18:28:11 · 78 阅读 · 0 评论 -
HDU1029.Ignatius and the Princess IV(一题多解.暴力→算法的4个level up↑
题目传送门大意:就是输出数字出现超过(N+1)/2次的那位数看到最后啊(#`O′)个人理解变化历程:既然要超过超过(N+1)/2那么就一定是最多次!(超内存了啊)→决定舍去结构体用数组的下标=数字的值、数组的值=数字出现的次数→题目强调n是奇数level 1:#include<stdio.h>#include<string.h>#include<algorithm>const int N=1e7+5;using namespace std;struc原创 2021-07-14 15:27:52 · 209 阅读 · 0 评论 -
HDU.1282回文数猜想(C++的函数运用)
Problem Description一个正整数,如果从左向右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。任取一个正整数,如果不是回文数,将该数与他的倒序数相加,若其和不是回文数,则重复上述步骤,一直到获得回文数为止。例如:68变成154(68+86),再变成605(154+451),最后变成1111(605+506),而1111是回文数。于是有数学家提出一个猜想:不论开始是什么正整数,在经过有限次正序数和倒序数相加的步骤后,都会得到一个回文数。至今为止还不知道这个猜想是原创 2021-07-13 20:15:29 · 589 阅读 · 0 评论 -
HDU1068.Girls and Boys(二分图&&匈牙利算法、匹配问题解答!
题目传送门理解:第一个数字是总人数接下来的每一行第一个数字是人的编号,括号内是和多少人谈恋爱过的次数,后面的谈恋爱的对象(酸分析:找出满足条件的最大集合————集合中没有两个学生有过恋爱关系。没有关系就是独立,要找出最大独立集。独立集就是,就是一个点集,点集中的各点没有关系。最大独立集就是,点的个数最多的独立集。最大独立集=n人-最大匹配————为什么减最大匹配?因为最小点集=最大匹配,最大匹配牵扯到匈牙利算法匈牙利算法简单的来说:不管后面怎么样遇到能匹配的就匹配,先到先得,但是如果后面的人与原创 2021-07-11 14:26:04 · 134 阅读 · 0 评论 -
HDU1052.Tian Ji -- The Horse Racing(贪心哦~
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1052大意:田忌赛马规则,输入n代表每人有n匹马,第一/二行代表田忌/国王的马的速度,每次一匹马进行比赛,败方给赢方200思路:贪心算法,首先把每个人的马按速度从低到高排序,然后先比较最快的马的速度,如果对方更高就用自己的慢马去比;如果对方小就算胜利然后拿第二快的马比较;如果相等就看最慢的马的速度比较,文字表述比较繁琐,代码有详细解释。这样循环比完所有马即可得到最大的赢面。#include<std原创 2021-03-21 20:46:20 · 180 阅读 · 1 评论 -
HDU1443.Joseph(三种解法)
题目链接:http://acm.hdu.edu.cn/diy/contest_showproblem.php?pid=1010&cid=37469首先解释约瑟夫规则:假设有6个人(人数即为2k),从1数到3,数到3的人要死(这个数即m)大家站成一排如下循环:(“×”就是被处决了)1 2 3 4 5 61 2 × 4 5 61 2 × 4 5 ×1 2 × × 5 ×1 × × × 5 ×1 × × × × ×大意:总共有2k个人,前k个是好人,后k个是坏人。在取决到好人之前先取决原创 2021-03-22 20:41:40 · 376 阅读 · 0 评论 -
HDU.1087Super Jumping! Jumping! Jumping!
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1087大意:在要走下一步的比上一步数字更大的情况下,使所走过的数字加起来能’最大’。思路:使用dp数组动态规划,dp[i]中i为第i个棋手,dp[i]为走到第i个棋手时的最大值。取dp[i]中的最大值即为输出结果。算法思路比较简单详情看代码注解。#include<stdio.h>#include<string.h>#include<algorithm>#defin原创 2021-03-15 20:26:11 · 95 阅读 · 0 评论 -
HDU2602.Bone Collector
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2602大意:有多个骨头,不同骨头的体积与骨头价值不一样。用规定容量带走最高的骨头价值。思路:动态规划借鉴背包问题,与s表的详细变化过程可得结果(当包的容积为指定数时,比较当前容积是否看装下当前这个骨头,若能装下则用包内的剩余体积去比较上一层的骨头是否能装下…很难说清楚,需要结合表的变化及代码一步一步推理即能理解,其他解释以及在代码内标注)#include<string.h>#include原创 2021-03-14 20:38:58 · 255 阅读 · 0 评论 -
HDU1023.I NEED A OFFER!
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1203动态规划问题思考:至少拿到一个offer就是可以拿到1,2,3…个offer的情况,而该情况是 1-不拿offer的情况。求最大拿offer的概率==求最小不拿offer的概率具体运算可以看dp变化表(适用于本题样品)#include<stdio.h>#include<string.h>#include<algorithm>using namespac原创 2021-03-14 19:48:27 · 104 阅读 · 0 评论 -
HDU2007.平方和与立方和
题目连接:http://acm.hdu.edu.cn=2007题意:输入两个数字,分别求这段数字间的偶数平方和与奇数立方和#include<stdio.h>int main(){ int n,m; while(~scanf("%d %d",&n,&m)) { int temp; if(n>m)//保证n<m { temp=n; n=m;原创 2021-03-08 20:20:20 · 60 阅读 · 0 评论 -
HDU2544.最短路
题目链接:HDU2544Dijkstra:从起点出发,不断更新能够到达的点的最短距离dis.每扩展一个点就重新更新下其他所有点到起点的最短距离dis,这个过程就是“松弛”#include<stdio.h>#include<string.h>#define N 105#define inf 0x3f3f3f3fint n,m;int mapp[N][N],dis[N],vis[N];void Dis(){ for(int i=1;i<=n;i++)原创 2021-02-05 16:55:54 · 226 阅读 · 0 评论 -
HDU2212.DFS
题目链接:HDU2212#include<stdio.h>int factorial(int i){ int pro=1; while(i>0) { pro*=i; i--; } return pro;}int main(){ int n=1; //while(n!=2147483647+1)用原数必定超时 /*逆向思维各个位上阶乘的和 是最大是9*9! 这样999999原创 2021-02-04 00:22:14 · 93 阅读 · 0 评论 -
HDU2178.猜数字
解析:2次幂问题每猜一次范围减半所以底数是2在1到m间,最多log2(m)+1(取整)次,(m为1时log2(m)=0,最少要猜一次,所以要加1)所以→m=2n-1.所以→猜n次能猜到的最大数的数为2n-1.即在数1到2n-1间,都可以在n次内猜出来.题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2178#include <stdio.h>#include <math.h>int main(void){原创 2021-02-03 23:29:10 · 124 阅读 · 0 评论 -
HDU1047.Integer Inquiry(大数求和)
题目连接:HDU1047详细解析见注释#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>#define N 105int main(){ int n; scanf("%d",&n); while(n--) { int sum[N];//大数的和(输出的答案) memset(sum,原创 2021-02-02 20:41:24 · 146 阅读 · 0 评论 -
POJ1306.Combinations
解题见代码注释题目链接:http://poj.org/problem?id=1306#include<stdio.h>#include<stdlib.h>/*公式:C(n,m)=n!/[m!(n-m)!] A(n,m)=n(n-1)(n-2)...(n-m+1)=n!/(n-m)! C(n,m)=A(n,m)/m=n(n-1)(n-2)...(n-m+1)/m!*/int main(){ int n,m,j; double s原创 2021-01-30 20:06:54 · 98 阅读 · 0 评论 -
HDU1032
#include<stdio.h>#include<string.h>int main(){ int a,b,t,num; while(~scanf("%d %d",&a,&b)) { printf("%d %d ",a,b);//提前输出a,b以免出现对调情况输成b,a int maxx=0; if(a>b) { int tt=a;原创 2021-01-24 21:26:02 · 201 阅读 · 0 评论 -
HUD1513.
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1513#include<stdio.h>#include<string.h>#include<stdlib.h>#define N 5005int main(){ int n,dp[2][N]; char a[N],b[N]; while(~scanf("%d",&n)) { scanf("%s",a);原创 2021-01-21 01:21:45 · 194 阅读 · 0 评论 -
HDU1080&&POJ1051.To the Max
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1081原创 2021-01-19 18:52:59 · 166 阅读 · 1 评论 -
HDU2030.汉字统计
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar原创 2021-01-12 22:07:03 · 141 阅读 · 0 评论 -
HDU.1250Hat‘s Fibonacci详解啊!!!!!
HDU1250传送门很明显,暴力相加一定会超范围啊!达咩达咩哟!!采用数组,小技巧划重点:每个数组元素存储八位数,由此进位,可以提高效率!(还是不了解的话看看代码就明白啦在这里插入代码片...原创 2021-05-27 21:42:08 · 82 阅读 · 0 评论 -
HDU1518
#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;int t,a[25],b[25],n,sum;bool cmp(int a ,int b){ return a>b;//降序}bool dfs(int coun,int num,int goal){ if(coun==3)原创 2021-06-04 18:34:47 · 89 阅读 · 0 评论