摘要:
#include#include#includeusing namespace std;char s[50][100];char t[10000],name[1000];int next[50005];void getnext(char s[])//把副串弄进来,next{ int i=0,j=-1; next[0]=-1; int len=strlen(s); while(i<len) { if(s[i]==s[j]||j==-1) { i++; j++; next[i... 阅读全文
摘要:
题意:给你n个数,要你在这n个数里面找到一些连续的数,这些数的数量大于等于m,并且他们的平均值在这n个数里面是最大的.......思路:先把n个数的最大最小值确定,然后二分枚举平均值,对于每一个连续数,只要他们减去平均值大于0,就调制上限制,不然调整下限制,.......#include#include#includeusing namespace std;double s[100005],sum[100005];int n,m;int deal(double ans){ double f=sum[m-1]-(m-1)*ans; //if(f>-1e-6) //return ... 阅读全文
摘要:
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;Now please try your lucky.#include#include#includeusing namespace std;double deal(double x){ return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;}int main(){ int t; scanf("%d",&t); while(t 阅读全文
摘要:
1、poj 3267题意:给你一个字符串,下面有若干单词,问字符串要变成由下面单词组成的字符串,至少要删除多少个字母......例如:6 10browndcodwcowmilkwhiteblackbrownfarmer其中,brown和cow可以组成browncow,这样至少是删除两个字母.......当然,下面的单词可以重复利用......思路:dp[i]表示历遍到第i个字符时要删除的最少字母数,那么从后面往前面历遍,dp[i]=dp[i+1]+1若是在i~~lens中,可以找到某个字符串,并且首字母就是i所处位置的字符,那么动态转移dp[i]=min(dp[i],dp[pos]+lens- 阅读全文
摘要:
前言:我们队的dp一直是我在做,说不上做的很顺,有些可以做,有些不能做。到现在为止,做dp题目也有七八十道了,除了背包问题的题目我可以说有百分之七八十的把握ac的话,其他类型的dp,还真没有多大把握。越是做dp题,就越是发现dp的博大精深,我想,dp这个专题,对于我这样的人来说,做上两百道,才能真正有所把握.........25道dp题题目:1.hdu 1503题意:给你两个字符串,要你用这两个字符串组成这样一个字符串,在组成的字符串中字符的相对顺序不变的情况下,可以在组成的字符串中找到原先两个字符串,字母可以错开,但是相对顺序不能变化,要这个组成的字符串中字母数最少,并输出这个字符串。Sam 阅读全文
摘要:
题意:圆心在原点,一个坐标(x,y)在圆上,通过这个点画一个三角形在圆内,三角形其顶点都在圆上,要求三角形的周长最大,输出满足这样条件的三角形的另两个坐标.....思路:有一个公式是把一个向量平移多少角度的......a向量=(x,y),要将a向量旋转120度x1=x*cos(120.0/180.0*PI)-y*sin(120.0/180.0*PI);y1=y*cos(120.0/180.0*PI)+x*sin(120.0/180.0*PI);平移过后就变成了(x1,y1)......公式:(x*cosθ- y * sinθ, y*cosθ + x * sinθ)需要注意的是,是向量平移,而不 阅读全文
摘要:
思路:有十个门,有十把钥匙,每把钥匙对应一个门,相同的门可以有多个。这样,我们就得按照状态来搜索,用0000000001代表第一个门有钥匙了,1000000000代表第十个门钥匙有了.......一次类推,可以用二进制来表示.......遇到钥匙,可以先拾起这个钥匙,用|;遇到门,可以判断是否有这个门的钥匙,把门状态位移后,&就好........#include#include#include#includeusing namespace std;int t[4][2]={1,0,-1,0,0,1,0,-1},vist[25][25][5000];char str[25][25];in 阅读全文
摘要:
思路:搜索题,第一次做这种类型的题目吧,一开始表示不怎么明白题意所说的东东。其实就是要你判断可乐能不能被平分........有六种状态,从a瓶到b瓶,a-->cb-->a b-->cc-->a c-->b然后每种状态里面又分两种不同情况,可以将此瓶的水全部清空,不能清空......然后广搜就可以了........#include#include#include#includeusing namespace std;int vist[105][105][105],a,b,c;struct node{ int a,b,c; int step;}s[105];int s 阅读全文
摘要:
#include#include#include#includeusing namespace std;double f[20];int n;double deal(double mid){ double sum=0; for(int i=0;i0&&n) { for(int i=0;i1e-6) { mid=(left+right)/2; if(deal(mid)>=0) left=mid; else right=mid; } printf("%.2lf\n",left-1.0); } return 0;} 阅读全文
摘要:
题意:输出一个环形字符串的最小字典序的首位置,以及最大字典序的首位置,以及这个字符串的原字符串的循环节.......#include#include#include#includeusing namespace std;#define M 1000020int next[M];char s[M];void getnext(){ int i=0,j=-1; next[0]=-1; int len=strlen(s); while(im) break; if(str[(i+l)%m] > str[(j+l)%m]) i=i+l+1; ... 阅读全文