摘要: http://poj.org/problem?id=2939题意:某个人点到两次时这个人自杀,当某个人点到三次时,循环结束,求结束时剩余的人数;#include<stdio.h>#define inf 1000009struct node{ __int64 q; int num; int next;}p[inf];int link[inf],m;void init(){ for(int i=0;i<=inf;i++) { link[i]=0; } m=1;}int find(__int64 q,int x){ int i;... 阅读全文
posted @ 2012-03-28 20:15 Szz 阅读(190) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1276#include<iostream>#include<stdio.h>#include<string.h>const int N=120005;using namespace std;int v,n,num[N],val[N],dp[N];void zeropack(int c){ for(int i=v;i>=c;i--) dp[i]=max(dp[i],dp[i-c]+c);}void completepack(int c){ for(int i=c;i<=v;i++) dp[i]= 阅读全文
posted @ 2012-03-24 09:10 Szz 阅读(133) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1837/*题意:有一个device(直杆),以中点为支点,左右长度都为15,上面在不同位置分布着一些挂钩。现在给出c个挂钩,和它们在杆上的位置(以中点的原点的x轴表示),以及Gigel有G个砝码,和它们各自的重量。求如果把这些钩码全部挂在任意钩上(一钩个挂任意多个),最终device能达到平衡的情况数。解题思路:01背包。首先这里有负数,所以用到了偏移变量temp(以他为平衡点),dp[i][j]表示i件东西,放上去达到j重量所需的方法数。因为最终要的是平衡状态 所以答案为:dp[g][temp]; 状态方程 :dp[i][k+val]+= 阅读全文
posted @ 2012-03-23 17:46 Szz 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 01背包 n代表物品种数,c[]代表花费,val[]代表价值 num[]代表 数量for(i=1;i<=n;i++){ for(j=v;j>=c[i];j--) dp[j]=max(dp[j],dp[j-c[i]]+val[i]);}多重背包 for(i=1;i<=m;i++) { for(j=1;j<=num[i];j++) { for(k=n;k>=w[i];k--) dp[k]=max(dp[k],dp[k-w[i]]+val[i]); ... 阅读全文
posted @ 2012-03-21 17:44 Szz 阅读(156) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=2191#include<stdio.h>#include<iostream>#include<string.h>using namespace std;const int N=1000;int w[N],val[N],dp[N],num[N];int main(){ int c,n,m,i,j,k; scanf("%d",&c); while(c--) { scanf("%d%d",&n,&m); for(i= 阅读全文
posted @ 2012-03-21 17:26 Szz 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 我能把整个世界都抽象成对象... 但是没办法把你变成我的对象... 想让你成为私有常量,外部函数无法访问你… 又想让你变成全局常量,在整个生命周期随时随地都可以调用你… 因为世界上没有这样的常量... 所以我的无法定义你... 我可以重载甚至覆盖任何一种方法... 但是我却不能重载对你的思念... 也许命中注定了 你在我的世界里永远的烙上了静态的属性... 而我不慎调用了爱你这个方法... 当我义无返顾的把自己作为参数传进这个方法时... 我才发现方法"爱你"里面执行是一个死循环... 她不停的返回对你的思念存入我心里的堆栈... 在这... 阅读全文
posted @ 2012-03-21 16:59 Szz 阅读(242) 评论(0) 推荐(0) 编辑
摘要: http://acm.hdu.edu.cn/showproblem.php?pid=1114#include<stdio.h>#include<iostream>using namespace std;const int N=15000;#define inf 999999int val[N],c[N],dp[N];int main(){ int t,e,f,i,j,n; scanf("%d",&t); while(t--) { scanf("%d%d",&e,&f); int v=f-e; scanf(& 阅读全文
posted @ 2012-03-21 16:49 Szz 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 快速幂取模 (2012-01-02 21:37:56)转载▼快速幂取模快速幂取模就是在O(logn)内求出a^n mod b的值。算法的原理是ab mod c=(a mod c)(b mod c)mod c因此很容易设计出一个基于二分的递归算法。以下是我的代码,以下代码必须保证输入的是合法的表达式,比如不能出现0^0 mod b:longexp_mod(longa,longn,longb){longt;if(n==0)return1%b;if(n==1)returna%b;t=exp_mod(a,n/2,b);t=t*t%b;if((n&1)==1) t=t*a%b;returnt;} 阅读全文
posted @ 2012-03-21 09:37 Szz 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 背包九讲 http://love-oriented.com/pack/初始化的细节问题我们看到的求最优解的背包问题题目中,事实上有两种不太相同的问法。有的题目要求“恰好装满背包”时的最优解,有的题目则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化的时候有所不同。如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将f[0..V]全部设为0。为什么呢?可以这样理解:初始化的f数组事实上就是在没有任何物品可以放入背 阅读全文
posted @ 2012-03-21 09:30 Szz 阅读(241) 评论(0) 推荐(1) 编辑
摘要: 1 #include<stdio.h> 2 #include<iostream> 3 using namespace std; 4 string str[]={"00", "02","04","06","30","32","34","36","40","42" 5 ,"44","46","50","52& 阅读全文
posted @ 2012-03-21 08:52 Szz 阅读(198) 评论(0) 推荐(0) 编辑