上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 27 下一页
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1787模板,就是还有点蒙#include#includeint gcd(int n)//这里可以直接利用欧拉函数的性质:小于n并与n互质的数的个数 { int i,j,ans=n; for(i=2;i1)ans=ans/n*(n-1);//有可能除到最后 本身还是一个质因子 return ans;} int main(){ int n; while(scanf("%d",&n),n) printf("%d\n",n-1-gcd(n)); return 0;}Vi 阅读全文
posted @ 2013-08-13 21:39 执着追求的IT小小鸟 阅读(179) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1286学到了筛法求欧拉函数。即欧拉函数φ(n)表示≤n且与n互素的正整数的数目(其实等于仅对1而言,φ(1)=1,1被认为与任何数互素)。编程求一个数的φ(n)显然很简单,用gcd()就可以了,但如果求一个很大范围(N)内所有数的欧拉函数值,gcd()就难以胜任了。在网上找了一下,发现欧拉函数的一个公式:φ(n)=n*(1-1/p1)(1-1/p2)....(1-1/pk),其中p1、p2…pk为n的所有素因子。比如:φ(12)=12*(1-1/2)(1-1/3)=4。利用这个就比较好求了,可以用类似求素数的 阅读全文
posted @ 2013-08-13 20:41 执着追求的IT小小鸟 阅读(305) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1210找规律的,追寻第一张的位置,当第一张位于n+1这个位置的时候,下一次就是重新洗好了。牌分成两部分,1....n,下次洗牌完会在2*n的位置,n+1....2*n,洗牌完会在2*n-(2*n-i)*2-1的位置。#include#includeint main(){ int n,m,i; while(scanf("%d",&n)!=EOF) { i=1; m=0; while(i!=n+1) { if(i<n+1... 阅读全文
posted @ 2013-08-13 14:46 执着追求的IT小小鸟 阅读(160) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1071推定积分公式。。。。设直线方程:y=kx+t…………………………………………………………(1) 抛物线方程:y=ax^2+bx+c……………………………………………………(2)已知抛物线顶点p1(x1,y1),两线交点p2(x2,y2)和p3(x3,y3)斜率k=(y3-y2)/(x3-x2)……………………………………………………(3)把p3点代入(1)式结合(3)式可得:t=y3-(k*x3)又因为p1是抛物线的顶点,可得关系:x1=-b/2a即b=-2a*x1………………(4)把p1点代入(2)式 阅读全文
posted @ 2013-08-13 10:38 执着追求的IT小小鸟 阅读(167) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1405纯属没有说清楚的格式题。。。orz 1 #include 2 #include 3 #include 4 int prime(int n) 5 { 6 int i; 7 int y=(int)sqrt(n); 8 for(i=2;i1)16 {17 x=n;18 if(ca>1)printf("\n");19 printf("Case %d.\n",ca++);20 if(prime(n)){21 ... 阅读全文
posted @ 2013-08-13 09:55 执着追求的IT小小鸟 阅读(161) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1249数学问题,学习了http://hi.baidu.com/matrixwhisper/item/6bfe48522351e0d19e266717#includeint main(){ int ans[10001]={0,2,8},i,t; for(i=3;i<10001;i++) ans[i]=ans[i-1]+6*(i-1); scanf("%d",&t); while(t--&&scanf("%d",&i)) printf( 阅读全文
posted @ 2013-08-12 20:49 执着追求的IT小小鸟 阅读(160) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1559这题相对上一题来说多了个限制条件,矩阵大小要是x*y的,这样的话倒更简单,只需计算出连续的x行,连续的y列和最大和即可,纵列和的求解用到了压缩的思想,就是把连续的x行上的同一列的数都相加存储在一个数组列对应的的下标元素里面 1 #include 2 #include 3 int a[1001][1001],n,m,x,y; 4 int maxx(int *b,int k) 5 { 6 int i,max=0,sum[11111]; 7 for(i=0;imax)max=sum[i];17... 阅读全文
posted @ 2013-08-10 17:29 执着追求的IT小小鸟 阅读(318) 评论(0) 推荐(0) 编辑
摘要: #include#includeint a[110][110],n;int maxx(int *b,int m){ int i,max,now; for(i=0;ib[i]) now+=b[i]; else now=b[i]; if(max0时(即前面的段加上a[j]这一段值会更大,自然把a[j]这一段接上)b[j]=b[j-1]+a[j],否则(由于前面的段为负值,加上a[j],会使值变小,这样的话,我们将前面的段去掉,a[j]即是最大值)b[j]=a[j].故b[j]的动态规划递归式为 b[j]=max(b[j-1]+a[j],a[j]... 阅读全文
posted @ 2013-08-10 16:39 执着追求的IT小小鸟 阅读(220) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1712物品分多组,每组中的每件都是冲突的,那么,背包问题变成,在某组中取一个,使得价值达到最大,或者这组一个都不取能使价值达到最大,在01背包基础上加一个循环就可以,在减去体积的时候依次减去每组每一个的体积,这里的体积正好对应纵坐标,所以不必再抽象成c[i]了,价值w[i] 2 int max(int a,int b) 3 { 4 return a>b?a:b; 5 } 6 int main() 7 { 8 int i,k,j,n,m,dp[110],a[110][110]; 9 wh... 阅读全文
posted @ 2013-08-09 17:04 执着追求的IT小小鸟 阅读(256) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1114这个题目关键在于两点,一个是完全背包问题,一个是背包是否装满完全背包 就是每个物品都可以无限放入,所以每个dp[j]放的都是目前状态比较后的结果,化为一维数组,为dp[v]=min(dp[v],dp[v-wi]+ci);循环记得是顺序的,这样能保证这一个放入的一定是之前所已知的,因为,是目前的状态题目有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这个问题非常类似于01 阅读全文
posted @ 2013-08-08 21:32 执着追求的IT小小鸟 阅读(312) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 27 下一页