上一页 1 ··· 44 45 46 47 48 49 50 51 52 ··· 57 下一页

2011年7月15日

Bellman-Ford算法之一

摘要: //Dijkstra算法是处理单源最短路径的有效算法,但它局限于边的权值非负的情况,//若图中出现权值为负的边,Dijkstra算法就会失效,//Bellman-Ford算法能在更普遍的情况下(存在负权边)解决单源点最短路径问题//负权回路,即权值之和小于0 的环路//图的任意一条最短路径既不能包含负权回路,也不会包含正权回路,因此它最多包含|v|-1条边。//Bellman-Ford算法可以大致分为三个部分//第一,初始化所有点。每一个点保存一个值,表示从原点到达这个点的距离,//将原点的值设为0,其它的点的值设为无穷大(表示不可达)。//第二,进行循环,循环下标为从1到n-1(n等于图中点 阅读全文

posted @ 2011-07-15 14:35 sysu_mjc 阅读(172) 评论(0) 推荐(0) 编辑

2011年7月14日

sicily 1051. Biker's Trip Odomete

摘要: #include <iostream>#include<stdio.h>#include<cmath>using namespace std;#define pi acos(-1.0)int main(){ int n=1; double d,r,t; while(cin>>d>>r>>t,r) { printf("Trip #%d: %.2f %.2f\n",n++, r*d*pi/63360 , r*d*pi*3600/(63360*t) ); } return 0;} 阅读全文

posted @ 2011-07-14 19:32 sysu_mjc 阅读(204) 评论(0) 推荐(0) 编辑

sicily 1793. Numbers

摘要: #include<iostream>#include<cmath>using namespace std;int gcd(int a,int b){ int r; while(b>0) { r=a%b; a=b;b=r; } return a;}int main(){ int a,b,c; while(cin>>a>>b&&a) { c=b/a; for(int i=sqrt(double(c));i>=1;--i) if(c%i==0&&gcd(c/i,i)==1) { cout<<a*( 阅读全文

posted @ 2011-07-14 19:22 sysu_mjc 阅读(133) 评论(0) 推荐(0) 编辑

sicily 1784. Road Toll

摘要: //应用Dijkstra算法,分别以扣费后剩下的钱,和扣费的数额作为路径计量#include<iostream> //Dijkstra算法#include<stdio.h>#include<cstring>using namespace std;double table[110][110],ans[110]; //ans[]记录从起点到该点扣完费后剩下的最大钱数bool S[110];int main(){ int cases,n,a,b,i,j; cin>>cases; while(cases--) { cin>>n>> 阅读全文

posted @ 2011-07-14 19:13 sysu_mjc 阅读(170) 评论(0) 推荐(0) 编辑

sicily 1783. Large is Better

摘要: #include<iostream>#include<algorithm>#include<functional>#include<cstring>usingnamespacestd;intmain(){charch[200];intcases;cin>>cases;while(cases--){cin>>ch;ints,t,len=strlen(ch);for(s=0;s<len;++s)if(ch[s]!='0')break;for(t=s;t<len;++t)if(ch[t]==' 阅读全文

posted @ 2011-07-14 16:48 sysu_mjc 阅读(210) 评论(0) 推荐(0) 编辑

sicily 1327. Pinary

摘要: #include<iostream> //递推关系#include<cstring>using namespace std;int ans[1000],sum[1000],out[1000];int main(){ ans[1]=ans[2]=1; sum[1]=1;sum[2]=2; int r=2; while(sum[r]<90000000) { ++r; ans[r]=ans[r-1]+ans[r-2]; sum[r]=ans[r]+sum[r-1]; } int cases,n,i,res[1000],t; cin>>cases; while 阅读全文

posted @ 2011-07-14 15:53 sysu_mjc 阅读(226) 评论(0) 推荐(0) 编辑

2011年7月13日

sicily 1274. Pascal's Travels

摘要: /*题意:在一个N×N的底盘上,每一格有一个非负整数,表示在那一格可以向右或向下走几步。每次只能向右或向下走,问从左上角的格子走到右下方的格子有多少种不同的方案。dp[i][j]表示到从左上角(1,1)到(i,j)的方案数dp[i][j]+=(dp[i][u])+(dp[v][j]),其中 1<=u<j, 1<=v<i, (i,u)能走到(i,j), (v,j)能走到(i,j)*/#include<iostream> //DP#include <cstdio>#include<cstring>using namespace 阅读全文

posted @ 2011-07-13 23:43 sysu_mjc 阅读(148) 评论(0) 推荐(0) 编辑

sicily 1091. Maximum Sum

摘要: #include<iostream>#include<stdio.h>usingnamespacestd;intnum[50010],l[50010],r[50010];#defineMin-9999999intmain(){intT,n,sum,tmp;cin>>T;while(T--){scanf("%d",&n);for(inti=1;i<=n;++i)scanf("%d",&num[i]);sum=0;tmp=Min;//l[i]表示[1,i]中最大的子段和for(inti=1;i< 阅读全文

posted @ 2011-07-13 22:37 sysu_mjc 阅读(261) 评论(0) 推荐(0) 编辑

sicily 1344. 数列

摘要: #include<iostream>//只要把n转化成二进制数,在各位置上乘以对应的系数就好了.比如k=3,n=6=110,则s=1*(3^2)+1*(3^1)+0*(3^0)=12,这好理解,就是把n的二进制看作是k进制的#include<cmath>usingnamespacestd;intmain(){intk,n,arr[100];while(cin>>k>>n){intr=0,s=0;while(n>0)//n转化成二进制{arr[r++]=n%2;n/=2;}for(inti=0;i<r;++i)s+=pow(double 阅读全文

posted @ 2011-07-13 16:18 sysu_mjc 阅读(211) 评论(0) 推荐(0) 编辑

sicily 1083. Networking

摘要: #include<iostream>//Prim算法#include<cstring>usingnamespacestd;intedge[55][55];structMST{intst,ed,w;}mst[100];intmain(){intp,r;while(cin>>p,p){cin>>r;for(inti=1;i<=p;++i)for(intj=1;j<=p;++j)edge[i][j]=200;inta,b,c;while(r--){cin>>a>>b>>c;edge[b][a]=edge[ 阅读全文

posted @ 2011-07-13 11:57 sysu_mjc 阅读(231) 评论(0) 推荐(0) 编辑

上一页 1 ··· 44 45 46 47 48 49 50 51 52 ··· 57 下一页

导航