題意:
並且,這篇文章中提到,採用棧的方法。想法值得學習。但感覺**有點長。
我自己用vector寫的如下:
#include#include#includeusing namespace std;
vectorstack; //0代表false 1代表true.
string s;
int judge(int index, int val)
return out;
} if (islower(s[index]))
stack.push_back(temp);
} else
stack.pop_back();
stack[len-2] = temp;
} } judge(index - 1, val);
}int main()
if (!flag)
} if(flag!=-1)cout << out << endl;
} return 0;
}
當然,網上還有更簡單的,沒有用到棧、vector之類的,就只有遞迴
(給我的啟發式,**寫完後要再多看看、改改,進一步想想有沒有更簡單的方法了)
**如下:
#include #include using namespace std;
static int pos = -1;
bool wff(const string& formula, int i)
return false;
};bool istautology(string formula)
return true;
};int main(int argc, char* argv)
return 0;
}
3295 括號序列 (序列DP)
描述 給定一串字串,只由 四個字元構成。現在讓你盡量少的新增括號,得到乙個規則的序列。例如 都是規則的序列。這幾個不是規則的,如 輸入 輸入有多組測試資料。輸入一串字串序列,長度不大於255。輸出 輸出最少新增的括號數目。樣例輸入 樣例輸出 題目 椒江校區第一屆c語言程式設計大賽 這個題是問需要新增...
HYSBZ3295 動態逆序對
time limit 10 sec memory limit 128 mb submit 5029 solved 1686 submit status discuss 對於序列a,它的逆序對數定義為滿足i aj 的數對 i,j 的個數。給1到n的乙個排列,按照某種順序依次刪除m個元素,你的任務是在每...
BZOJ P3295 動態逆序對
bzoj yzoj 我們可以預處理出每乙個點所包含的逆序對數k i 刪除的時候把這個值減去就可以了。問題在於之前的操作可能已經把當前要減去的逆序對數包含了。考慮乙個操作序列。在當前對答案減去k i 後,只需加上當前點與之前操作刪掉的點存在的逆序對數就好了。我們知道當前操作為a,滿足操作b在a之前,b...