摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2236思路:引:为了保证每行每列只取一个元素,我们可以从二分图最大匹配的思想入手,把行和列分别看做二分图左右两部分,i-j的边权就是第i行第j列的元素的值。这样构图之后,求得的二分图最大匹配的4条边就是不在同行或同列的4个元素。有了这个思想时候,我们只需要再保证4个元素中最大值与最小值之差尽量小就可以了,于是我们可以二分枚举最大值与最小值之差,并枚举边权值的下界,如果枚举到某个边权值的下界时该图存在最大匹配,那么就更新max,否则就更新min。 1 #include<iostream> 阅读全文
摘要:
题目链接:http://gnu.bnu.edu.cn/contest/problem_show.php?pid=4359思路:直接递推就可以了,dp[i][0]表示前i位不含4或者13,且最后一位不为1的个数,dp[i][1]表示前i位不含4或者13,最后一位为1的个数;于是有dp[i][0]=8*dp[i-1][0]+7*dp[i-1][1],dp[i][1]=dp[i-1][0]+dp[i-1][1]; 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cm 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2988思路:水题,kruskal求最小生成树之后,直接用总权值减去即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 #define MAXN 222222 7 typedef long long LL; 8 struct Edge{ 9 int u,v,w;10 }edge[MAXN 阅读全文
摘要:
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3501思路:首先用一下欧拉函数Eluar(n)求一下1-n中与n互质的质因子的个数,然后就要用到下面简单的定理了:如果gcd(n,i)==1,那么就有gcd(n,n-i)==1;于是题目的要求是要求小于n并且与n不互质的所有数的和,这里我们可以先求与n互质的所有数的和为sum=n*(Eular(n)/2)(这里用到了上面的定理。最后所有数的和减去sum即可。 1 #include<iostream> 2 #include<cstdio> 3 #include<cstri 阅读全文