摘要: 此题数据规模不大,可以通过暴力水过,代码如下#include <iostream>using namespace std;const int maxn=101;int num[maxn][maxn]; int n;int getM(){ int i,j,k,i2,j2; int f[maxn]; int max=-1<<20,sum; for(i=1;i<=n;i++) { memset(f,0,sizeof(f)); for(j=i;j<=n;j++) { for(k=1;k<=n;k++) ... 阅读全文
posted @ 2012-11-18 16:42 lishimin_come 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 多重背包问题,在网上看了背包九讲的前三篇,但感觉还是理解的不够透彻,过一段时间集中搞一下dp,现在就当预习啦#include <iostream> #include <cmath> using namespace std; int f[20001*6],m[7]; int main() { int t=0; while(cin>>m[1]>>m[2]>>m[3]>>m[4]>>m[5]>>m[6]) { t++; int i,sum=0; for(i=1;i<=6;i++) { sum+=m[ 阅读全文
posted @ 2012-11-16 18:55 lishimin_come 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 哎,折腾了一中午,终于ac拉。考察的是欧拉算法的扩展。我在此题中,思考的时间最长的部分就是通过扩展了欧拉算法得到了解后,如何得到最小的正整数解。对于这个小问题,我却百思不得其解。然后在网上找了解题报告后,才有了思路,就是先求出解系,然后通过这个解系的式子得到最小的整数解#include <iostream> #include <cmath> using namespace std; void gcd(long long a,long long b,long long &gcdd,long long &w,long long &t) { if(b= 阅读全文
posted @ 2012-11-13 15:09 lishimin_come 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 数据量不大,可以直接枚举。首先确定所需要的最小进制,然后从此处向62进行枚举。然后就是关于求摸的问题。不可能把整个数先求出来。因为数很大,根本存不下。根据求摸公式可得结果a1a2a3a4...a(s)%(n-1)=(a1+a2+...a(s)))%(n-1)#include <iostream> #include <cstring> using namespace std; char s[40000]; int get(char a) { if(a>='0'&&a<='9') return a-'0&# 阅读全文
posted @ 2012-11-12 16:43 lishimin_come 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 数论唯一分解定理的应用,要注意负数的情况,想明白这个过程用了两个小时,后来因为一个while写成了if有调试了俩小时,为什么还是这么菜数论唯一分解定理的应用,要注意负数的情况,想明白这个过程用了两个小时,后来因为一个while写成了if有调试了俩小时,为什么还是这么菜 #include <iostream> #include <cmath> using namespace std; int gcd(int a,int b) { if(b==0) return a; else return gcd(b,a%b); } int main() { long long n; w 阅读全文
posted @ 2012-11-11 18:37 lishimin_come 阅读(121) 评论(0) 推荐(0) 编辑
摘要: 很基础的一道数学题,不过感觉跑的太慢啊,422ms#include <iostream> #include <cmath> using namespace std; const int maxn=1000001; int vis[maxn],p[maxn]; int t; void prime() { t=0; int i,j; int n=(int)sqrt(maxn-1); for(i=2;i<=n;i++) { if(!vis[i]) { p[t++]=i; for(j=i*i;j<=maxn-1;j+=i) vis[j]=1; } } } i... 阅读全文
posted @ 2012-11-09 17:11 lishimin_come 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 在网上看的解题报告,推到了一会,终于想明白了这个过程,先写出c关于b的关系式,通过枚举b看是否符合c是整数的条件,然后确定界的问题,根据式子首先可确定b>a,因为b和c在关系式中具有对称性,那么可让b永远都<=c(b和c的关系就三种),通过b-c<=0确定上界,然后通过f=c+b求导可知,在枚举b的范围内f是递减的,所以从大到小枚举得到的第一个满足的,f就是最小,注意a*a比较大,要用unsigned long来定义a#include <iostream> #include <cmath> using namespace std; int main() 阅读全文
posted @ 2012-11-08 21:43 lishimin_come 阅读(300) 评论(0) 推荐(0) 编辑
摘要: 最小费用,最大流的思想,也不知道怎么稀里糊涂就ac啦#include <iostream> #include <cstring> #include <queue> using namespace std; const int maxn=102; const int inf=2<<20; int cost[maxn][maxn],flow[maxn][maxn],cap[maxn][maxn],d[maxn]; int n,m; int solve() { queue<int> q; int i,vis[maxn],p[maxn],to 阅读全文
posted @ 2012-11-08 14:45 lishimin_come 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 刚开始是用的邻接矩阵,一直wa,后来看了其他人的代码,又想了想,两个点之间有多条路径,不能只存储权值最小的,因为每个路径都可能是一个最短路的组成部分(但现在还不是想的太清楚),所以有多少条边,就存多少边的信息bellman-ford#include <iostream> using namespace std; const int maxn=501; const int inf=2<<20; int d[maxn],w[maxn*maxn],u[maxn*maxn],v[maxn*maxn]; int f,n,m,wm,t; bool bellman() { int i 阅读全文
posted @ 2012-11-04 20:14 lishimin_come 阅读(132) 评论(0) 推荐(0) 编辑
摘要: bellman-ford算法,此题可看做最短路径问题,原因是,可把到源点的距离看做负值(自己建立的一个抽象模型,但不表示出来,考虑的时候按这个负值模型考虑)。那么求解此题,就是看有没有至少一个负权环,如果有的话,因为根据此题可知,所以包含这个负权环的任一路径且在这个负权环之后的所有节点都会是无穷小,源点到源点的某一路径一定包含这个负权环,所以只要这个负权环走过一定次数,一定会导致源点到源点的距离小于初始值,其实就是题目要求的大于初始值。不需要考虑正权环抵消对结果的影响,因为如果有正权环,完全可以不走这个正权环。因为从源点返回源点,至少会经过一个环,但如果没有负权环,就不会使得到的新距离小于初始 阅读全文
posted @ 2012-11-03 19:03 lishimin_come 阅读(257) 评论(0) 推荐(0) 编辑