摘要: 题意:把1~n这n个数分成两个堆,使它们的和相等问:一共有多少种分法?我们其实可以把它变成另一个问题:把1~n个数,组成n*(n+1)/2的一半有多少种方法?(用一些数组成一个数有多少方法?)n*(n+1)/2是个奇数的话,就直接输出0dp[i]+=dp[i-j];dp[i]表示和为 i 拼成它的组合个数View Code 1 #include <stdio.h> 2 3 int main() 4 { 5 int n,i,j,sum; 6 long long dp[500]={0}; 7 scanf("%d",&n); 8 sum=n*(n+1)/2; 阅读全文
posted @ 2011-10-30 09:06 104_gogo 阅读(159) 评论(0) 推荐(0) 编辑
摘要: dp[i]+=dp[i-a];dp[i]表示组成数 i 的方式的个数View Code 1 #include <stdio.h> 2 3 int main() 4 { 5 int n,m,i,j,a; 6 long long dp[10005]={0}; 7 scanf("%d%d",&n,&m); 8 dp[0]=1; 9 for (i=0;i<n;i++)10 {11 scanf("%d",&a);12 for (j=a;j<=m;j++)13 {14 dp[j]+=... 阅读全文
posted @ 2011-10-29 23:19 104_gogo 阅读(129) 评论(0) 推荐(0) 编辑
摘要: dp[i]=min(dp[i-ar[j]]+1,dp[i]);dp[i]表示第i个数最少需要邮票数第一个自己想出来的,呵呵,虽然很简单..View Code 1 #include <stdio.h> 2 #include <algorithm> 3 4 using namespace std; 5 6 int dp[2000005],ar[200]; 7 8 int main() 9 {10 int k,n,i,j;11 while(scanf("%d%d",&k,&n)!=EOF)12 {13 dp[0]=0;14 for (i.. 阅读全文
posted @ 2011-10-29 22:57 104_gogo 阅读(260) 评论(0) 推荐(0) 编辑
摘要: 1A 没说的~~View Code #include <stdio.h>#include <string.h>#include <algorithm>using namespace std;struct node{ int t,deadline; char s[105];}ar[16];int n,m,Min,vis[16],path[16],ans[16],dp[70000];int d[]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384,32768};int cmp(node a,node 阅读全文
posted @ 2011-10-28 14:12 104_gogo 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 找到规律了还是简单,不过郁闷的是要C++才不超时..if 匹配的个数>空格数 空格数+1;else 空格数=匹配个数;View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int k=1; 5 char s[100005][15]; 6 7 int match() 8 { 9 int i;10 for (i=0;s[k][i]&&s[k-1][i];i++)11 {12 if(s[k-1][i]!=s[k][i])return i;13 }14 return i;15 }1... 阅读全文
posted @ 2011-10-28 09:03 104_gogo 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 又是这种题..POJ上这种题真多View Code #include <stdio.h>__int64 ar[10000000];__int64 min(__int64 a,__int64 b,__int64 c){ if(a<=b&&a<=c)return a; if(b<=a&&b<=c)return b; if(c<=a&&c<=b)return c;}int main(){ int a,b,c,n,i,j,k,l; while (scanf("%d%d%d%d",& 阅读全文
posted @ 2011-10-27 15:32 104_gogo 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 题意:告诉你n个点的经纬度,求从一个点到其它点的最远的最小距离(能懂吧.)居然是到数学题,学到了好多公式..假设地球是球体,设地球上某点的经度为lambda,纬度为phi,则这点的空间坐标是x=cos(phi)*cos(lambda)y=cos(phi)*sin(lambda)z=sin(phi)设地球上两点的空间坐标分别为(x1,y1,z1),(x2,y2,z2)直线距离即为R*sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)+(z2-z1)*(z2-z1)),则它们的夹角为 A = acos(x1 * x2 + y1 * y2 + z1 * z2)球面距离为 A*R 阅读全文
posted @ 2011-10-27 14:48 104_gogo 阅读(228) 评论(0) 推荐(0) 编辑
摘要: 题意:给你n种个长方体,告诉你每种长方体的长,宽,高,并且每种长方体个数不限问:把它们堆起来的最大高度限制条件:上面一个长方体a的底面积,必须比它下面一个长方体b的底面积大,而且,a的底面的长宽也要大于b的底面的长宽所以,b的底面积如果比a的底面积小,b也不一定能放在a上面View Code #include <iostream>#include <algorithm>using namespace std;struct node{ int a,b,h,area;}ar[100];int cmp(node a,node b){ return a.area>b.ar 阅读全文
posted @ 2011-10-27 09:09 104_gogo 阅读(855) 评论(0) 推荐(0) 编辑
摘要: 数列的通项式:ar[i]=ar[i-1]+2*ar[i-2];View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 int ar[255][2000]; 5 6 int main() 7 { 8 int n,i,j,l,pre,len[255]; 9 while (scanf("%d",&n)!=EOF)10 {11 if(n==0)12 {13 printf("1\n");continue;14 }15 memset... 阅读全文
posted @ 2011-10-26 20:29 104_gogo 阅读(133) 评论(0) 推荐(0) 编辑
摘要: View Code 1 #include <stdio.h> 2 3 int ar[5],a,b,c,d,m; 4 5 6 int solve() 7 { 8 for (d=0;d<=ar[4];d++) 9 {10 if(d>m)break;11 for (c=0;c<=ar[3];c++)12 {13 if(c*5+d>m)break;14 for (b=0;b<=ar[2];b++)15 {16 if(b*10+c... 阅读全文
posted @ 2011-10-26 18:40 104_gogo 阅读(254) 评论(0) 推荐(0) 编辑