最大m子段和問題:給定由n個(gè)整數(shù)(可能為負(fù))組成的序列a1、a2、a3...,an,以及一個(gè)正整數(shù)m,要求確定序列的m個(gè)不想交子段,使這m個(gè)子段的總和最大!
設(shè)b(i,j)表示數(shù)組a的前j項(xiàng)中i個(gè)子段和的最大值,
并且第i個(gè)子段包含a[j](1<=i<=m,i<=j<=n),則所求的最優(yōu)值為maxb(m,j)(m<=j<=n)。在這種定義下b(i,j)的遞推公式:b(i,j)=max{b(i,j-1)+a[j],maxb(i-1,t)+a[j](i-1<=t<j)}(1<=i<=m,i<=j<=n);b(i,j-1)+a[j]表示第i個(gè)包含a[j-1]和a[j],maxb(i-1,t)+a[j]表示第i個(gè)子段僅包含a[j]。
這中定義很強(qiáng)悍,尤其是黃色標(biāo)記部分,直接把b(i,j)把a(bǔ)[j]限制在第i段內(nèi),然后再分a[j-1]和a[j]都在子段內(nèi)和只有a[j],特殊的當(dāng)m=1時(shí),b(1,j)=max(b(1,j-1)+a[j],a[j]),1<=j<=n;如果翻譯成文字的話,就是說在數(shù)組j位置的最大和子段(包含a[j])等于數(shù)組在j-1位置的最大和子段(包含a(j-1))加上a[j]和最大和子段只有a[j]的情況的最優(yōu)值,當(dāng)然所求解可以表示為maxb(1,j)(1<=j<=n);
其實(shí)如果光從b(1,j)=max(b(1,j-1)+a[j],a[j])這個(gè)等式本生出發(fā)我們很容易的觀察出b(1,j-1)的正負(fù)直接決定著b(1,j)的取值,然后我們可以產(chǎn)生這中想法,如果b(1,j-1)為正,我就繼續(xù)加,如果為負(fù)我就重新開始加!!!這樣的話,寫成程序就更簡單,其實(shí)就是前面我寫的最大子段和的動(dòng)態(tài)規(guī)劃方法的解釋。。。(今天終于明白了!!!)
代碼如下:
#include<stdio.h>

int MaxSum1(int m,int n,int *a)//m為切割段數(shù),n為數(shù)組大小


{
int i,j,k,sum;
if(n<m||m<1)
return 0;
int **b =new int *[m+1];

for(i=0;i<=m;i++)
b[i]=new int[n+1];
for(i=0;i<=m;i++)
b[i][0]=0;
for(j=1;j<=n;j++)
b[0][j]=0;

for(i=1;i<=m;i++)
for(j=i;j<=n-m+i;j++)

{
if(j>i)

{
b[i][j]=b[i][j-1]+a[j];
for(k=i-1;k<j;k++)

{
if(b[i][j]<b[i-1][k]+a[j])
b[i][j]=b[i-1][k]+a[j];
}
}
else

{
b[i][j]=b[i-1][j-1]+a[j];
}
}
sum=0;
for(j=m;j<=n;j++)
if(sum<b[m][j])
sum=b[m][j];
delete b;
return sum;
}

//教科書上又進(jìn)行了代碼優(yōu)化,如下
int MaxSum(int m,int n,int *a)


{
int i,max,j,sum;
if(n<m||m<1)
return 0;

int *b=new int[n+1];
int *c=new int[n+1];
b[0]=0;
c[0]=0;
for(i=1;i<=m;i++)

{
b[i]=b[i-1]+a[i];
c[i-1]=b[i];
max=b[i];
for(j=i+1;j<=i+n-m;j++)

{
b[j]=b[j-1]>c[j-1]?b[j-1]+a[j]:c[j-1]+a[j];
c[j-1]=max;
if(max<b[j])
max=b[j];
}
c[i+n-m]=max;
}

sum=0;
for(j=m;j<=n;j++)
if(sum<b[j])
sum=b[j];
return sum;
}


int main()


{
int n,m;
int a[100],i;
while(scanf("%d %d",&m,&n)!=EOF)

{
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("%d\n",MaxSum(m,n,a));
}
return 0;
}
對(duì)于這段代碼我按著思想看了一遍,沒有仔細(xì)推敲過,不知道會(huì)不會(huì)是個(gè)禍患,但是測試通過了!!!
最大和和矩陣是最大和子段的推廣,是最大和子段推廣到二維的形式,當(dāng)然我們可把二維形再轉(zhuǎn)化成一維的形式,這就是求最大和矩陣方法了!二維轉(zhuǎn)化為一維時(shí)我們直接用窮舉法!
代碼如下:
#include<stdio.h>
int MaxSum(int n,int *a)


{
int sum=0,b=0;
for(int i=1;i<=n;i++)

{
if(b>0)
b+=a[i];
else
b=a[i];
if(b>sum) sum=b;
}
return sum;
}
int MaxSum2(int m,int n,int a[][100])


{
int sum=0;
int *b=new int [n+1];
for(int i=1;i<=m;i++)

{
for(int k=1;k<=n;k++)
b[k]=0;

for(int j=i;j<=m;j++)

{
for(int k=1;k<=n;k++)

{
b[k]+=a[j][k];
int max=MaxSum(n,b);
if(max>sum)
sum=max;
}
}
}
delete b;
return sum;
}
int main()


{
int a[100][100],i,j,n,sum,m;
while(scanf("%d %d",&m,&n)!=EOF)

{
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)

{
scanf("%d",&a[i][j]);
}
sum=MaxSum2(m,n,a);
printf("%d\n",sum);
}
return 0;
}
運(yùn)行結(jié)果如下:
昨天杭州的天氣真的只能用詭異來形容,上班時(shí),萬里無云!下班時(shí),半邊日出半邊雨!我住在杭城西面,下班是由東往西走的,前面 一個(gè)大太陽,后面狂風(fēng)暴雨,坐在公交車上,時(shí)而在雨幕里,時(shí)而在夕陽下。。更詭異的是我下來車后就開始打雷了,嚇的我一路狂奔回家,被雨追著跑的感覺真差!狂奔后,才發(fā)現(xiàn)自己原來這么虛弱,才跑了1000米左右,就感覺渾身乏力了,在學(xué)校體能測試的時(shí)候我可是跑第一的,缺少運(yùn)動(dòng)呀,看樣子人確實(shí)是要常常運(yùn)動(dòng)運(yùn)動(dòng),好東西也要常常拾得拾得!
回家后我想起以前我同學(xué)問過我的一個(gè)問題,為什么是雷聲轟隆隆的?我當(dāng)時(shí)回答是云層碰撞不規(guī)整,強(qiáng)度有差異,其實(shí)這只是我的猜想。然后我同學(xué)又問了,為什么雷聲是轟隆隆傳向遠(yuǎn)方,然后消失了!我不知道了,沒做出回答!!當(dāng)時(shí)被同學(xué)小小的鄙視了一下,這個(gè)問題其實(shí)很多中學(xué)生都能回答出來!!!今天我又去網(wǎng)上查了一下,雷是怎么產(chǎn)生的,為什么雷聲是轟隆隆的?結(jié)果發(fā)現(xiàn)了以下文章:



在完成一次閃電的時(shí)間內(nèi),窄狹的閃電通道上要釋放巨大的電能,因而形成強(qiáng)烈的爆炸,產(chǎn)生沖擊波,然后形成聲波向四周傳開,這就是雷聲或說"打雷"。
聽起來,雷聲可以分為兩種。一種是清脆響亮,象爆炸聲一樣的雷聲,一般叫做"炸雷";另一種是沉悶的轟隆聲,有人叫它做"悶雷"。還有一種低沉而經(jīng)久不歇的隆隆聲,有點(diǎn)兒象推磨時(shí)發(fā)出的聲響。人們常把它叫做"拉磨雷",實(shí)際上是悶雷的一種形式。


閃電通路中的空氣突然劇烈增熱,使它的溫度高達(dá)15000-20000℃,因而造成空氣急劇膨脹,通道附近的氣壓可增至一百個(gè)大氣壓以上。緊接著,又發(fā)生迅速冷卻,空氣很快收縮,壓力減低。這一驟脹驟縮都發(fā)生在千分之幾秒的短暫時(shí)間內(nèi),所以在閃電爆發(fā)的一剎那間,會(huì)產(chǎn)生沖擊波。沖擊波以5000米/秒的速度向四面八方傳播,在傳播過程中,它的能量很快衰減,而波長則逐漸增長。在閃電發(fā)生后0.1-0.3秒,沖擊波就演變成聲波,這就是我們聽見的雷聲。
還有一種說法,認(rèn)為雷鳴是在高壓電火花的作用下,由于空氣和水汽分子分解而形成的爆炸瓦斯發(fā)生爆炸時(shí)所產(chǎn)生的聲音。雷鳴的聲音在最初的十分之幾秒時(shí)間內(nèi),跟爆炸聲波相同。這種爆炸波擴(kuò)散的速度約為5000米/秒,在之后0.1-0.3秒鐘,它就演變?yōu)槠胀暡ā?nbsp;

人們常說的炸雷,一般是距觀測者很近的云對(duì)地閃電所發(fā)出的聲音。在這種情況下,觀測者在見到閃電之后,幾乎立即就聽到雷聲;有時(shí)甚至在閃電同時(shí)即聽見雷聲。因?yàn)殚W電就在觀測者附近,它所產(chǎn)生的爆炸波還來不及演變成普通聲波,所以聽起來猶如爆炸聲一般。


如果云中閃電時(shí),雷聲在云里面多次反射,在爆炸波分解時(shí),又產(chǎn)生許多頻率不同的聲波,它們互相干擾,使人們聽起來感到聲音沉悶,這就是我們聽到的悶雷。一般說來,悶雷的響度比炸雷來得小,也沒有炸雷那么嚇人。
拉磨雷是長時(shí)間的悶雷。雷聲拖長的原因主要是聲波在云內(nèi)的多次反射以及遠(yuǎn)近高低不同的多次閃電所產(chǎn)生的效果。此外聲波遇到山峰、建筑物或地面時(shí),也產(chǎn)生反射。有的聲波要經(jīng)過多次反射。這多次反射有可能在很短的時(shí)間間隔內(nèi)先后傳入我們的耳朵。這時(shí),我們聽起來,就覺得雷聲沉悶而悠長,有如拉磨之感。
黃色標(biāo)注部分為雷聲轟隆隆的原因,解釋的挺容易讓人接受的,我現(xiàn)在回憶昨天看到的閃電和聽到的雷聲,好像是聲波不斷反射傳入我耳朵里的結(jié)果,最后聲波慢慢消失,就聽不到了!
現(xiàn)在我又回想了下當(dāng)時(shí)同學(xué)問問題時(shí)候場景,如果當(dāng)時(shí)能夠從我現(xiàn)在的角度出發(fā),結(jié)合到動(dòng)態(tài)規(guī)劃知識(shí),就可能會(huì)回答出問題了。。。首先,最優(yōu)子結(jié)構(gòu)為聲源發(fā)出聲波傳入我耳朵里(這個(gè)很明顯能知道);然后聲波遇到障礙物反射(其實(shí)可以看做新的聲源),再次傳入我的耳朵,不過音量會(huì)變小(這個(gè)過程和最優(yōu)子結(jié)構(gòu)性質(zhì)是相同,當(dāng)然能夠想到這一步才能回答出同學(xué)問題,但是從最優(yōu)子結(jié)構(gòu)是可以猜想后來雷聲轟隆隆的);最后就有不同的反射聲波傳入我的耳朵,聽到轟隆隆混雜的聲音!
可惜沒有如果,不過我現(xiàn)在知道了也好,雖然我同學(xué)當(dāng)時(shí)沒有告訴我原因,但是他告訴我怎么測聲源的位置,聲音的速度是340米每秒,從閃電發(fā)光的時(shí)候,開始數(shù)秒設(shè)為t,340*t就是數(shù)秒人與聲源的距離了(解釋是聲速與光速差太多了,所以光傳入眼睛的時(shí)間可以看做是聲源發(fā)出聲音的時(shí)間,這也是為什么打雷的時(shí)候先看到閃電,后聽到雷聲的原因)。
解釋了這些,我還有一點(diǎn)不清楚,就是經(jīng)常聽見飛機(jī)在天上飛,但是一抬頭飛機(jī)卻在另一個(gè)地方!!!
摘要: 均分紙牌
Time Limit:1000MS Memory Limit:65536KTotal Submit:241 Accepted:103
Description
有 N 堆紙牌,編號(hào)分別為 1,2,…, N。每堆上有若干張,但紙牌總數(shù)必為 N 的倍數(shù)。可以在任一堆上取若干張紙牌,然后移動(dòng)。移牌規(guī)則為:在編號(hào)為 1 堆上取的紙牌,只能移到編號(hào)為 2 的堆上;在...
閱讀全文
弄了一個(gè)早上的最接近點(diǎn)對(duì),沒弄明白。。。還是做點(diǎn)簡單的吧!
代碼如下:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<iostream>
using namespace std;
int main()


{
int magic,i;
srand(time(NULL));//srand()需包含頭文件stdlib.h,種子!

printf("RAND_MAX=%d\n",RAND_MAX);//原來RAND_MAX是個(gè)常量32767;rand()函數(shù)的返回值范圍:0~32767

for(i=1;i<10;i++)//輸出十個(gè)1~100隨機(jī)數(shù)

{
magic=rand()/(int)(((unsigned)RAND_MAX+1)/100);
// magic=rand()%100+1;//課堂上老師說這樣可以取1~100之間的隨機(jī)數(shù),今天才明白原來是跟100取余的結(jié)果!
printf("%d ",magic);
}
printf("\n");

double a[10];

for(i=0;i<10;i++)
a[i]=(double)rand()/RAND_MAX;//這樣寫可以變成小數(shù)!

for(i=0;i<10;i++)
printf("%.2lf ",a[i]);

printf("\n");
return 0;
}
簡單的問題串聯(lián)可以組成復(fù)雜!
給定已經(jīng)排好序的n個(gè)元素a[0...n-1],現(xiàn)在在這n個(gè)元素中找出一特定元素x。
代碼如下:
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
template <class Type>
int BinarySearch(Type a[],Type& x,int n)


{
int left=0;
int right=n-1;

while(left<=right)

{
int middle=(left+right)/2;

if(x==a[middle])
return middle;

if(x>middle)
left=middle+1;

else
right=middle-1;
}
return -1;
}

template <class Type> //重載
int BinarySearch(Type a[],Type& x,int left,int right)


{
int middle=(left+right)/2;

if(x==a[middle])
return middle;

else if(x>middle)
return BinarySearch(a,x,middle+1,right);

else
return BinarySearch(a,x,left,middle-1);

return -1;
}

int main()


{
int i,n,x;
int a[100];
while(scanf("%d",&n)!=EOF)

{
for(i=0;i<n;i++)
scanf("%d",&a[i]);

sort(a,a+n);

for(i=0;i<n;i++)
printf("%d ",a[i]);
printf("\n");

scanf("%d",&x);

printf("%d\n",BinarySearch(a,x,n));

printf("%d\n",BinarySearch(a,x,0,n-1));
}
return 0;
}
運(yùn)行結(jié)果:
我們不斷做著把事情翻譯成語言的工作!
漢諾塔老生常談的問題!
個(gè)人體會(huì):一、理解函數(shù)意義和數(shù)據(jù)意義!
二、想象力,就像把一棵二叉樹先展開,再收攏!
直接上代碼(注釋以前寫的):
#include<stdio.h>
int count1,count;//count1,表示第一個(gè)圓盤移動(dòng)的次數(shù)
//count,表示總的移動(dòng)次數(shù)


/**//*函數(shù)功能:限制移動(dòng)過程
函數(shù)參數(shù): 整形變量num,表示第n個(gè)盤子
自發(fā)性變量 from,表示源木樁
字符型變量to,表示目的木樁
*/

void move(int num,char from,char to)


{
printf("move %d:from %c to %c\n",num,from,to);
count++;
}


/**//*函數(shù)功能:將第n個(gè)盤子從源木樁A,借助于木樁C移動(dòng)到木樁B
函數(shù)參數(shù):n,表示第n個(gè)盤子
a,表示源木樁a
b,表示目的木樁b
c,表示過度木樁c*/


/**//*我自己想法:
三個(gè)木樁,從第n個(gè)盤開始移動(dòng),只有當(dāng)其他的盤都在c木樁才能移動(dòng)n,
同理要將第n-1個(gè)盤從c移動(dòng)到b,要將n-2個(gè)盤全部移動(dòng)到a木樁
*/



void hanoi(int n,char a,char b,char c)


{
if(n==1) //遞歸出口:為什么是n==1?

{
move(n,a,b); //第n個(gè)盤子由a->b
count1++;
}
else

{
hanoi(n-1,a,c,b); //將第n-1個(gè)盤子,借助于b由a->c
move(n,a,b); //第n個(gè)盤子有a->b
hanoi(n-1,c,b,a); //將第n-1個(gè)盤子,借助于a有c->b
}
}


int main()


{
int n;
while(n!=0)

{
scanf("%d",&n);
hanoi(n,'A','B','C');
printf("count=%d\n",count);
printf("count1=%d\n",count1);
}
return 0;
}



/**//*通過程序運(yùn)行,我們還可以得到:
當(dāng)n為偶數(shù)時(shí),第一個(gè)盤第一次移動(dòng)移動(dòng)到c,
當(dāng)n為奇數(shù)時(shí),第一個(gè)盤第一次移動(dòng)到移動(dòng)到b*/
運(yùn)行結(jié)果:
有n=2^k個(gè)運(yùn)動(dòng)員比賽,現(xiàn)要求設(shè)計(jì)一張比賽日程表,要求如下:
(1)每個(gè)選手必須與其他n-1個(gè)選手各比賽一次;
(2)每個(gè)選手一天只能比賽一次;
(3)循環(huán)賽一共進(jìn)行n-1天;
這個(gè)題目自己列下表,觀察一下規(guī)律就成,書上說的二分不是那么好理解!重在實(shí)際應(yīng)用。。。
代碼如下:
#include<stdio.h>

void Table(int k,int a[][100])


{
int n=1;
int i,j,s,t;
for(i=1;i<=k;i++)
n*=2;
for(i=1;i<=n;i++)
a[1][i]=i;
int m=1;
for(s=1;s<=k;s++)

{
n/=2;
for(t=1;t<=n;t++)
for(i=m+1;i<=2*m;i++)
for(j=m+1;j<=2*m;j++)

{
a[i][j+(t-1)*m*2]=a[i-m][j+(t-1)*m*2-m];
a[i][j+(t-1)*m*2-m]=a[i-m][j+(t-1)*m*2];
}
m*=2;
}
}

int main()


{
int a[100][100];
Table(3,a);
int i,j;
for(i=1;i<=8;i++)

{
for(j=1;j<=8;j++)
printf("%d ",a[i][j]);
printf("\n");
}
return 0;
}
結(jié)果:
最大公約的兩種求法:
代碼如下:
#include<stdio.h>
int gcds(int a,int b)//stein算法


{


if(a<b)
{
int temp = a;
a = b;
b=temp;
}

if(0==b) //b=0返回
return a;

if(a%2==0 && b%2 ==0) //a和b都是偶數(shù)
return 2*gcds(a/2,b/2);

if ( a%2 == 0) // a是偶數(shù),b是奇數(shù)
return gcds(a/2,b);

if ( b%2==0 ) // a是奇數(shù),b是偶數(shù)
return gcds(a,b/2);

return gcds((a+b)/2,(a-b)/2);// a和b都是奇數(shù)
}

int gcdo(int a,int b) //歐幾里得


{

if(b==0)
return a;


if(a<b)
{
int temp = a;
a = b;
b=temp;
}
return gcdo(b,a%b);
}
int main()


{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)

{
printf("%d\n%d\n",gcds(a,b),gcdo(a,b));
}
return 0;
}
歐幾里得算法,當(dāng)初老師給我們的時(shí)候,只是說這樣求可以求得最大公約數(shù),沒給出證明。。
百度上搜了一下,基本證明思想a,b(a>b)的公約數(shù)和a,a%b的公約數(shù)是相同的。Stein算法證明也類似!!
苦惱啊!
Description
設(shè)有n個(gè)正整數(shù),將他們連接成一排,組成一個(gè)最大的多位整數(shù)。例如:n=3時(shí),3個(gè)整數(shù)13,312,343,連成的最大整數(shù)為:34331213
又如:n=4時(shí),4個(gè)整數(shù)7,13,4,246連接成的最大整數(shù)為7424613
Input
N
N個(gè)數(shù)
Output
連接成的多位數(shù)
Sample Input
3
13 312 343
0
Sample Output
34331213
這個(gè)題目意思應(yīng)該很好理解,至少會(huì)想有兩種解題思路,
一、把數(shù)組從大到小排列,這樣是最大嗎? 顯然不是,例如:123 9,應(yīng)該輸出9123;
二、把數(shù)組按字符串排序,這樣是最大嗎?這問題可能會(huì)然我們困惑,但是這也是錯(cuò)的,例如:120,12;應(yīng)該輸出12120;
這個(gè)題目不知道毒害了多少人(當(dāng)然我指的是ACM新人),尤其是第二種思路去寫代碼的。。這只是一個(gè)悲劇的開始,你把一條彎路在直走!
其實(shí)這個(gè)題目應(yīng)該是屬于動(dòng)態(tài)規(guī)劃的最簡單應(yīng)用!子問題,給你兩個(gè)數(shù),讓你連成最大數(shù),一定非常簡單,只能組成兩個(gè)數(shù),比較一下大小就成!這就是解題思路!
如果給你三個(gè)數(shù)呢?一直遞推下去!悲劇啊,盡然怎么簡單!
代碼如下:


#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main()


{
int n,i,j,l,k;
char s[1000][100];
char s1[200],s2[200];
while(scanf("%d",&n)!=EOF&&n!=0)

{
for(i=0;i<n;i++)

{
scanf("%s",s[i]);
while(s[i][0]=='0')

{
if(strlen(s[i])==1)
break;
strcpy(s[i],s[i]+1);
}
}
for(i=0;i<n;i++)

{
for(j=i+1;j<n;j++)

{
strcpy(s1,s[i]);
strcat(s1,s[j]);
strcpy(s2,s[j]);
strcat(s2,s[i]);
if(strcmp(s1,s2)<0)

{
strcpy(s1,s[i]);
strcpy(s[i],s[j]);
strcpy(s[j],s1);
}
}
}
for(i=0;i<n;i++)

{
if(s[0][0]=='0')

{
printf("0");
break;
}
else

{
printf("%s",s[i]);
}
}
printf("\n");
}
return 0;
}



本來我也是第二種思路的,我看了感覺不像,因?yàn)橐郧皩戇^了!
早上的幾點(diǎn)收獲:
1、<string>頭文件和<string.h>頭文件是不一樣的!運(yùn)行時(shí)的一個(gè)錯(cuò)誤,弄了一個(gè)早上,最后發(fā)現(xiàn)這什么個(gè)問題!
2、運(yùn)用容器,排序字符串
vector<string> words;
string str;
while(scanf("%s",str)!=EOF)
words.push_back(str);

sort(words.begin(),words.end(),greater<string>());


for(vector<string>::size_type i=0;i<words.size();i++)

{
cout<<words[i]<<endl;
}
不過會(huì)有很多警告,讓我很苦惱!有誰知道呢?
警告如下:
--------------------Configuration: rongqi - Win32 Debug--------------------
Compiling
rongqi.cpp
c:\documents and settings\administrator\桌面\rongqi\rongqi.cpp(81) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,std::basic_string<char,std::char_traits<char>,std::allocator<char
> >,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > const *,int>' : identifier was truncated to '255' characters in the debug information
c:\documents and settings\administrator\桌面\rongqi\rongqi.cpp(81) : warning C4786: 'std::reverse_iterator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,std::basic_string<char,std::char_traits<char>,std::allocator<char> >,st
d::basic_string<char,std::char_traits<char>,std::allocator<char> > &,std::basic_string<char,std::char_traits<char>,std::allocator<char> > *,int>' : identifier was truncated to '255' characters in the debug information
c:\program files\microsoft visual studio\vc98\include\vector(39) : warning C4786: 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >
>::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information
c:\program files\microsoft visual studio\vc98\include\vector(60) : warning C4786: 'std::vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > >
>::~vector<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::allocator<std::basic_string<char,std::char_traits<char>,std::allocator<char> > > >' : identifier was truncated to '255' characters in the debug information

rongqi.obj - 0 error(s), 0 warning(s)

3、在程序頭上寫#pragma warning (disable: 4786),可以注銷4786以后警告!