haoi2008专题

BZOJ 1041 [HAOI2008] 圆上的整点(数论)

Description 求一个给定的圆(x2+y2=r^2),在圆周上有多少个点的坐标是整数。 Input 只有一个正整数n,n<=2000 000 000 Output 整点个数 Sample Input 4 Sample Output 4 Hint 科普视频 Source 太神了,竟然和素数扯上关系。 https://blog.csdn.net/csyzcyj/article/det

BZOJ1042[HAOI2008]硬币购物(容斥定理+完全背包)

题目描述 硬币购物一共有4种硬币。面值分别为c1,c2,c3,c4。某人去商店买东西,去了tot次。每次带di枚ci硬币,买si的价值的东西。请问每次有多少种付款方法。 输入格式 第一行 c1,c2,c3,c4,tot 下面tot行 d1,d2,d3,d4,s 输出格式 每次的方法数 输入输出样例 输入 #1复制 1 2 5 10 2 3 2 3 1 10 1000 2 2 2 900 输出

BZOJ 1044 [HAOI2008]木棍分割 二分+动态规划

Description   有n根木棍, 第i根木棍的长度为Li,n根木棍依次连结了一起, 总共有n-1个连接处. 现在允许你最多砍断m个连 接处, 砍完后n根木棍被分成了很多段,要求满足总长度最大的一段长度最小, 并且输出有多少种砍的方法使得总长 度最大的一段长度最小. 并将结果mod 10007。。。 Input   输入文件第一行有2个数n,m.接下来n行每行一个正整数Li,表

[HAOI2008]硬币购物题解

题目链接 分析 一道容斥好题,如果用多重背包,估计会t死的,我们可先做完全背包,求出方案数,再用总方案数减去不可用的方案数(比如说对于每个硬币i,硬币数超过c[i]的),这时你会发现可以用容斥做,手动容斥即可,时间:3500ms。 上代码 #include<bits/stdc++.h>#define ll long longusing namespace std;ll c[5],l[

[HAOI2008]木棍分割题解

题目链接 分析 第一问是最简单的二分答案,就不说了。第二问则要用到dp中的隔板法,对于本题就是找到一个节点i能到达的最左端lef[i](连续子段和<=第一问中的答案),f[i][j]代表前i个数分成j块的方案数,则f[i][j]=Σ f[k][j-1] (k>=lef[i]&&k<i) ,而因为空间问题,是不可以开1000x50000数组的,所以一个数组f记录当前j的所有i的答案,而s记录j-

洛谷 P1450 [HAOI2008] 硬币购物

思路 完全背包:预处理出不限制硬币数量的方案数。 dp[0]=1;dfor(i,1,4) dfor(j,c[i],(int)1e5) dp[j]+=dp[j-c[i]]; 容斥 不限制数量的方案数 − - − 超出限制的方案数 = 符合限制的方案数 。考虑第 i i i 种硬币超出数量限制的方案数。强制支付 d i + 1 d_i+1 di​+1 个 i i i 种硬币,价值为

【HAOI2008】bzoj1043 下落的圆盘

Description   有n个圆盘从天而降,后面落下的可以盖住前面的。求最后形成的封闭区域的周长。看下面这副图, 所有的红 色线条的总长度即为所求. Input   第一行为1个整数n,N<=1000 接下来n行每行3个实数,ri,xi,yi,表示下落时第i个圆盘的半径和圆心坐标. Output   最后的周长,保留三位小数 可以算是【uva1308 Viva Confetti】的升级

BZOJ 1043 [HAOI2008]下落的圆盘

Description   有n个圆盘从天而降,后面落下的可以盖住前面的。求最后形成的封闭区域的周长。看下面这副图, 所有的红 色线条的总长度即为所求.  Input   第一行为1个整数n,N<=1000 接下来n行每行3个实数,ri,xi,yi,表示下落时第i个圆盘的半径和圆心坐标. Output   最后的周长,保留三位小数 Sample Input 2

【bzoj 1055】[HAOI2008]玩具取名(字符串dp)

1055: [HAOI2008]玩具取名 Time Limit: 10 Sec   Memory Limit: 162 MB Submit: 1590   Solved: 927 [ Submit][ Status][ Discuss] Description 某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后 他会根据自己的喜好

[HAOI2008]移动玩具 状压

发现自己只会打状压了。 233333 不需要考虑是否会被挡,所以直接dp #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std;int tot1,tot2,a[5][5],b[5][5];int x1[20],x2[20]