dp問題是日常生活乃至程式設計競賽中經常遇到的一類有意義的問題,他的一大特點就是:記錄下小規模資料的最優解,然後將其應用於大規模資料的計算當中。但是,在這兒,最難思考的就是所謂的轉移方程。如何通過合適的變化得到當前的狀態,是動態規劃問題的核心。可以說,得到了相應的狀態轉移方程,問題便相應而解。下面,就看一道杭電的簡單動態規劃來看具體的狀態轉移。
題目的**:
題目的描述十分簡單,就是輸出n條直線相交的交點的所有可能情況。但是,如果給出乙個n強行求的話,不僅沒有合適的演算法,而且程式會十分耗時。所以我們利用動態規劃的問題來進行求解。但是,如何進行思考呢?
我們知道,交點的個數與這些直線相交的情況有關。我們將直線分為兩堆,一堆是這些直線中最大的平行直線序列。而另一堆直線中,可能會有相互平行的直線,也有可能不存在相互平行的直線,所以我們設他們的交點數為j,那麼這n條直線的總交點數就是r(n-r)+j(r為第一堆中直線的數目)。而n條直線最多會有n*(n-1)/2個交點,這樣迴圈的上下界便確定了。問題便相應解決。
**;
#include #include #include using namespace std;
int main()
}} }
while (scanf("%d", &n) != eof)
}cout << endl;
} return 0;
}
DP問題各種模型的狀態轉移方程
1 最長公共子串 注意和最長公共子串行區別 兩個字串str1和str2,長度分別為 l1,l2 dp i j 表示以兩個字串分別以第i和第j個字元結尾所能達到的公共子串行的長度,由於下面涉及到i 1和j 1,那麼這個時候我們一般從i 1和j 1開始到i len1,j len2。if str i 1 ...
DP問題各種模型的狀態轉移方程
原帖位址 1 最長公共子串 注意和最長公共子串行區別 兩個字串str1和str2,長度分別為 l1,l2 dp i j 表示以兩個字串分別以第i和第j個字元結尾所能達到的公共子串行的長度,由於下面涉及到i 1和j 1,那麼這個時候我們一般從i 1和j 1開始到i len1,j len2。if str...
DP問題各種模型的狀態轉移方程
1 最長公共子串 注意和最長公共子串行區別 兩個字串str1和str2,長度分別為 l1,l2 dp i j 表示以兩個字串分別以第i和第j個字元結尾所能達到的公共子串行的長度,由於下面涉及到i 1和j 1,那麼這個時候我們一般從i 1和j 1開始到i len1,j len2。if str i 1 ...