摘要: 挺水的dp,脑抽把mod多打了个0结果弹了2次。好吧,我们记录dp[i][j][k]为选i个数字,和为j,lcm为k的个数有多少种接下来枚举第i+1个数字进行转移就行了,开三维会MLE,可以用滚动数组做。我的做法有点类似背包,将lcm和sum从大到小枚举,这样避免重复。 1 #include 2 #include 3 #include 4 #define mod 1000000007 5 using namespace std; 6 int dp[1010][40]; 7 int f[1010][1010]; 8 int n,m,k; 9 int a[1010],aa[1010];10 ... 阅读全文
posted @ 2013-11-07 15:43 wonderzy 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 #include 5 #define mod 1024 6 #define ll long long 7 #define nn 2 8 using namespace std; 9 struct rec{10 ll v[nn][nn];11 rec(){memset(v,0,sizeof v);}12 };13 rec mul(rec a,rec b){14 rec ans;15 ll sum;16 for(int k=0;k<nn;k++){17 for(in... 阅读全文
posted @ 2013-11-05 19:04 wonderzy 阅读(222) 评论(0) 推荐(0) 编辑
摘要: sb题,不解释 1 #include 2 #include 3 #include 4 #define mod 9973 5 #define ll long long 6 using namespace std; 7 int nn,k,t; 8 struct rec{ 9 ll v[11][11];10 rec(){memset(v,0,sizeof v);}11 };12 rec mul(rec a,rec b){13 rec ans;14 ll sum;15 for(int k=0;k<nn;k++){16 for(int i=0;... 阅读全文
posted @ 2013-11-05 17:03 wonderzy 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 很水的一道矩阵快速幂。 1 #include 2 #include 3 #include 4 #define ll long long 5 using namespace std; 6 int g[10],k,mod; 7 struct rec{ 8 ll v[10][10]; 9 rec(){memset(v,0,sizeof v);}10 };11 rec mul(rec a,rec b){12 rec ans;13 ll sum;14 for(int k=0;k<10;k++){15 for(int i=0;i<10;i++){... 阅读全文
posted @ 2013-11-05 16:53 wonderzy 阅读(157) 评论(0) 推荐(0) 编辑
摘要: 解题思路:aibi=(ai-1*AX+AY)(bi-1*BX+BY)=AX*BX*ai-1bi-1+AX*BY*ai-1+BX*AY*bi-1+AY*BYn-1 n-1 n-1 n-1 ∑ aibi = AX*BX*∑ ai-1bi-1 + AX*BY*∑ ai-1 + BX*AY*∑ bi-1 + (n-1)*AY*BY +A0*B0i=0 i=0 i=0 i=0n-1 n-1∑ ai = AX*∑ ai-1 + (n-1)*AY + A0i=0 i=0n... 阅读全文
posted @ 2013-11-05 00:01 wonderzy 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 解题思路:dp[i][j]表示第i个人选的数字是j有多少种方法.dp[i][0]=dp[i-1][0]*0+dp[i-1][1]*1...+dp[i-1][k]*1+dp[i-1][k+1]*1+...+dp[i-1][m]*1dp[i][1]=dp[i-1][0]*1+dp[i-1][1]*0...+dp[i-1][k]*1+dp[i-1][k+1]*1+...+dp[i-1][m]*1....dp[i][k]=dp[i-1][0]*1+dp[i-1][1]*1...+dp[i-1][k]*0+dp[i-1][k+1]*1+...+dp[i-1][m]*1dp[i][k+1]=dp[i-1] 阅读全文
posted @ 2013-11-04 23:28 wonderzy 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 #include 5 #define ll long long 6 using namespace std; 7 int n,m,t,tol,tt; 8 ll f[100010]; 9 ll sum[100010]; 10 struct edge{ 11 int u,v,x; 12 ll l; 13 edge(){} 14 edge(int u,int v,ll l,int x):u(u),v(v),l(l),x(x){} 15 friend bool op... 阅读全文
posted @ 2013-11-04 23:01 wonderzy 阅读(319) 评论(0) 推荐(0) 编辑
摘要: 此题要注意一些细节:当n#include #include using namespace std;int n,a[10];int main(){ while(~scanf("%d",&n)){ for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); if(n<=3){cout<<1024<<endl;continue;} int sum=0; for(int i=0;i<n;i++) sum+=a[i]; int ans=0; if(n==... 阅读全文
posted @ 2013-10-30 23:54 wonderzy 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 水题,注意一定要用__int64#include #include #include #define ll __int64using namespace std;int t;ll n;ll dp[21][3];void init(){ memset(dp,0,sizeof dp); dp[0][1]=1; for(int i=1;i=0;i--){ if(c[i]>=5) ret+=(ll)(c[i]-1)*(dp[i][0]+dp[i][1])+dp[i][1]; else ret+=(ll)c[i]*(dp[i][0]+dp[i][1]); ... 阅读全文
posted @ 2013-10-24 20:38 wonderzy 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 解题思路: dp[i][0]表示未出现吉利数,以2为首的i位数字有多少 dp[i][1]表示未出现吉利数,不以2和4为首的i位数字有多少 dp[i][2]表示出现吉利数的i位数字有多少 注意一下,2前面的数字为6的要排除掉就行 1 #include 2 #include 3 #include 4 using namespace std; 5 int dp[10][3]; 6 void init(){ 7 memset(dp,0,sizeof dp); 8 dp[0][1]=1; 9 dp[1][0]=1,dp[1][1]=8,dp[1][2]=1;10 f... 阅读全文
posted @ 2013-10-24 18:59 wonderzy 阅读(248) 评论(0) 推荐(0) 编辑