|
01 2012 档案
摘要:题意:有数字n,m1-m的数字(数字个数无限制)可以组成多少个n完全背包dp[j]=dp[j]+dp[i-j];注意大数,刚开始没有写前导0,WA了一次View Code #include<stdio.h>#include<string.h>const int MOD=100000000;struct data{ int s[9];}dp[1009];data add(data a,data b){ int i=0; data ret; ret.s[i]=(a.s[i]+b.s[i])%MOD; for(i=1;i<9;i++) { ret.s...
阅读全文
摘要:如输入括号,求解总子串和最长长度为多少,并求解有最长括号几种8(())))))(())最长为4,有C(6,2)=15种;(最后的‘)’,‘)’可以在后面6个里面选2个)显然:16(())))))(())))))输出:8 22532(())))))(())))))(())))))(())))))输出:16 5062514()()()()()()()输出:14 114)()()()))((())输出:10 94)))(输出:0 1总子串和最长长度好算,如何求解它有几种呢开个hash[]如对于(()))))),将可以匹配的'('写为1,‘)’写为2,不能匹配的写为0112200002
阅读全文
摘要:http://blog.csdn.net/swm8023/article/details/6525980比较好的资料求C(10,3,107)第一步: 10/3第二步: *9/2第三步:*8/1如第一步里会出现除不下时的情况,用中国剩余定理做View Code #include<stdio.h>long long min(long long a,long long b){ if(a>b)return b; else return a;}long long ext_gcd(long long a,long long b,long long &x,long long &am
阅读全文
摘要:规定内存限制为3mb在一个数列里n个数,输出不为m个数字的那个数5 32 2 3 3 3 输出39 21 1 3 2 2 3 3 4 4 输出39 41 2 2 1 2 1 2 3 1 输出3开a[64]的数组记录二进制转化好的数最后对该数组取余%m在对应的/(n%m)数组转化为数字即可View Code #include<stdio.h>#include<string.h>int a[64]; int main(){ int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int i,temp,add;
阅读全文
摘要:疲劳奔跑,求最长跑了多少一开始没有看到题目的特殊性,一旦休息,就一直休息直到疲劳度为0dp[i][j] i表示到第i个跑点,j表示当时的疲劳度时最大,WA其实考虑了特殊性就是0,1背包了add[i]表示1-i的和dp[i]=max(dp[i],dp[i-j*2]+add[i-j]-add[i-2*j]);View Code #include<stdio.h>int dp[10009];int add[10009];int max(int a,int b){ if(a>b)return a; else return b;}int main(){ int n,m; whil...
阅读全文
摘要:每头牛在一定的时间段里挤奶,一共N个时间段,长度M,求最大挤奶量(类似于最大递增子序和1,3,2,4,3,6 最大和14)先排序,使时间段有序在求最大递增子序和View Code #include<stdio.h>#include<iostream>#include<algorithm>using namespace std;struct data{ int s; int e; int p;}s[1009];int dp[1009];bool cmp(data a,data b){ if(a.s==b.s) return a.e; else ...
阅读全文
摘要:为什么我们会用二分,三分查找?因为我们不知道一个题目的准确答案,可以用二分,三分查找逼近答案如果一个问题是明显的单调性的话,用二分一个问题是明显的凸函数的话,三分而问题的重点是如何写出函数,还有函数上下限的控制!!!
阅读全文
摘要:将一段数列左右取,all+=th*s[i]求最大和是多少左右取涉及到两个动作,故开个二维dp[i][j]=max(dp[i-1][j]+s[i]*(i+j),dp[i][j-1]+s[n-j+1]*(i+j));View Code #include<stdio.h>#include<string.h>int s[2009];int dp[2009][2009];int max(int a,int b){ if(a>b)return a; else return b;}int main(){ int n; while(scanf("%d",&am
阅读全文
摘要:三分主要推出fun函数fun(A)的意义就是在原来坐标上的点经过A弧度逆旋转后,正方形(边与坐标轴平行)最小边长要多长fun()在旋转的时候符合凸函数,所以三分求最值View Code #include<stdio.h>#include<math.h>#include<iostream>using namespace std;const double maxn=0xfffffffffffff;const double minn=-0xfffffffffffff;const double PI=acos(-1.0);double x[39],y[39];int
阅读全文
摘要:随着人的移动,求影子长短的变化,求最长先写凸函数,注意是分段函数double temp=h*1.0/H*d; double y; if(x<temp) y=(x*H-h*d)/(-d+x)+x; else y=(d-x)*h*1.0/H;三分模板一套就0了View Code #include<stdio.h>double ll,rr,mid,midmid,H,h,d;double fun(double x){ double temp=h*1.0/H*d; double y; if(x<temp) y=(x*H-h*d)/(-d+x)+x; else ...
阅读全文
|