- 博客(19)
- 资源 (2)
- 收藏
- 关注
原创 POJ 2142 The Balance
SOL : 扩展的欧几里德, ax+by==c x=x0+b/d*t;y=y0-a/d*t;求|x|+|Y|的最小值可以发现:|x0+b/d*t| 单调递增 |y0-a/d*t| 单调递减 因为 a>b,所以就是说函数是凹的,先减小后增大。显然 当y0-a/d*t==0的时候 |x|+|Y| 最小值就在那附近。枚举几个值就能找到。#in
2014-05-20 21:31:01 619
原创 HRBUST 1328 相等的最小公倍数
SOl:将原题改为枚举N的每一对因子,计算其是否互素即可。#include #include #include using namespace std;inline int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}int main(){ int n,T,i,j; scanf("%d",&T); while(T
2014-05-20 20:54:23 711
原创 POJ 3070 Fibonacci
Sol:就是求第N项的斐波那契数。矩阵乘法+快速幂#include #include #include #include using namespace std;#define LL long longstruct Mat{ LL f[2][2];};LL MOD = 10000;Mat mul(Mat a,Mat b){ LL i,j,k
2014-05-18 20:34:24 538
原创 ZOJ 3213 Beautiful Meadow
求简单路径。得到最大的分数。用最小表示法,需要增加标志位记录独立插头个数。要使独立插头个数小于等于2.
2014-05-13 15:51:26 524
原创 HDU 4285 circuits
插头DP。题目要求构造出K条回路的方案数,而且不能出现环套环。Sol:通过增加标记为来记录形成的回路数,假如不形成环的话就是在形成新的环路,此时,两边的插头个数要为偶数。#include#include#include#includeusing namespace std;const int MAXD=15;const int STATE=1000010;const i
2014-05-13 14:51:24 990
原创 HDU 3377 Plan
插头DP。从左上角到右下角,每个格子都有Val,每个格子只能经过一次,可以不经过,求最大的分数之和。#include#include#include#includeusing namespace std;const int MAXD=15;const int HASH=10007;const int STATE=1000010;int N,M;int maz
2014-05-13 14:42:49 778
原创 HDU 1693 Eat the Trees
插头DP,多条回路求回路数。可以当作模版来记。注重理解轮廓线。#include #include #include #include using namespace std;const int HASH=10007;const int STATE=5000; //状态数const int MAXD=15;int code[MAXD],maze[MAXD][MAXD];
2014-05-13 14:22:59 728
原创 HDU 4572 Bottles Arrangement
详细的证明:点击打开链接我的想法:要想保证题目所说 构造最小行的和,只能是这种情况..... m-3 m-2 m-1 m | m m-1 m-2 m-3 . .... 所以Ans 也就是取前N项就可。又因为 It is guaranteed that N is always odd。 显然构造没问题。#include #in
2014-05-13 13:52:12 724
原创 HDU 4565 So Easy!
线性推,矩阵乘法+快速幂求通项。传送门:点击打开链接#include #include #include #include using namespace std;#define LL long longstruct Mat{ LL f[2][2];};LL MOD;Mat mul(Mat a,Mat b){ LL i,j,k;
2014-05-13 13:45:29 735
原创 BNU 33960 The table
其实就是签到题。。高精度,就是让你求一个矩阵哪一列的乘积和最大,输出该列的列号,如果乘积相同则输出最大的列号。import java.util.Scanner;import java.math.*;public class Main { static final int maxn = 1000 + 10; static final int maxm = 25 + 10; stati
2014-05-11 15:31:14 677
原创 XDU 1284 寻找礼物
枚举+二分查找。A+B+C >= K ----> C >= K - A -B ----> 统计大于等于C的个数即可。 #include #include #include #include #include #include using namespace std;int a[1010];int Scan() //输入外挂{ int
2014-05-06 14:04:26 700
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人