1. C語言DP 問題。。請看圖片。 這題是貪心還是DP DP 的話 狀態轉移方程是什麼 請詳細解答。。
過了這么長時間了,也不知道你問題有沒有解決,今天看到你這個題目,覺得你把問題給復雜化了……其實這個題根本不需要用DP,至於貪心,也許存在一個很快的貪心法,可至少我是沒想出來……
我的想法很簡單,從0到m-n,依次求「當以第i個元素為左邊界時,右邊界至少需要定到什麼地方才能保證包含所有的n個數」,然後從這些求出的區段中選擇長度最小的即可。看起來很暴力,但實際上,比如你現在知道了以第0個元素為左邊界時,右邊界至少要定到12,那麼當以第1個元素為左邊界時,右邊界只要從12開始向右滑動進行判斷就可以了,再加上判斷是否包含所有n個數的開銷,演算法的復雜度為O(mn),這個復雜度是完全可接受的。不要在意具體的規模有多大,只要演算法的復雜度合適就可以了。
貼上具體代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int flag[101],data[100000];
int m,n;
int inline meet()
{
int i;
for(i=1;i<=n;++i)
if(!flag[i])
return 0;
return 1;
}
int main()
{
int min;
int c,i,j;
scanf("%d",&c);
while(c--)
{
memset(flag,0,sizeof(flag));
scanf("%d%d",&m,&n);
for(i=0;i<m;++i)
scanf("%d",data+i);
for(i=0;!meet();++i)
++flag[data[i]];
j=i-1;
min=i;
if(min==n||min==m)
goto next;
for(i=1;i<=m-n;++i)
{
--flag[data[i-1]];
if(meet())
{
if(j-i+1<min)
{
min=j-i+1;
if(min==n)
goto next;
}
}
else
{
while(++j<m)
{
++flag[data[j]];
if(meet())
{
if(j-i+1<min)
{
min=j-i+1;
if(min==n)
goto next;
}
break;
}
}
if(j>=m)
goto next;
}
}
next:
printf("%d\n",min);
}
return 0;
}
這個代碼沒怎麼優化過,但是今天我冒死潛入你們dlut的oj上提交了一下,結果ac了,用了110ms左右吧,時間上好像還可以,你可以再優化一下。
有問題請追問
2. C語言編程題中的DP題 是什麼類型題
DP就是動態規劃(Dynamic Programming)。
1,什麼是動態規劃(DP)?
非常重要!,不要認為概念不重要,理解的深刻,你才知道對於什麼樣的問題去考慮有沒有動態規劃的方法,以及如何去使用動態規劃。
1)動態規劃是運籌學中用於求解決策過程中的最優化數學方法。 當然,我們在這里關注的是作為一種演算法設計技術,作為一種使用多階段決策過程最優的通用方法。
它是應用數學中用於解決某類最優化問題的重要工具。
2)如果問題是由交疊的子問題所構成,我們就可以用動態規劃技術來解決它,一般來說,這樣的子問題出現在對給定問題求解的遞推關系中,這個遞推關系包含了相
同問題的更小子問題的解。動態規劃法建議,與其對交疊子問題一次又一次的求解,不如把每個較小子問題只求解一次並把結果記錄在表中(動態規劃也是空間換時間
的),這樣就可以從表中得到原始問題的解。
關鍵詞:
它往往是解決最優化問題滴
問題可以表現為多階段決策(去網上查查什麼是多階段決策!)
交疊子問題:什麼是交疊子問題,最有子結構性質。
動態規劃的思想是什麼:記憶,空間換時間,不重復求解,由交疊子問題從較小問題解逐步決策,構造較大問題的解。
一個最簡單的DP問題就是斐波拉切數列。f(n) = f(n-1) + f(n-2)
如果採用遞歸的方法計算,復雜度很高的。
還有一個問題就是矩陣的連乘問題, 計算最少的乘法次數,這些都是經典的DP問題。
3. 什麼是dp演算法
DP演算法是解決多階段決策過程最優化問題的一種常用方法。
多階段決策過程版(multistep decision process)是指這樣一類特殊的權活動過程,過程可以按時間順序分解成若干個相互聯系的階段,在每一個階段都需要做出決策,全部過程的決策是一個決策序列。動態規劃(dynamic programming)演算法是解決多階段決策過程最優化問題的一種常用方法,難度比較大,技巧性也很強。利用動態規劃演算法,可以優雅而高效地解決很多貪婪演算法或分治演算法不能解決的問題。
動態規劃演算法的基本思想是:將待求解的問題分解成若干個相互聯系的子問題,先求解子問題,然後從這些子問題的解得到原問題的解;對於重復出現的子問題,只在第一次遇到的時候對它進行求解,並把答案保存起來,讓以後再次遇到時直接引用答案,不必重新求解。動態規劃演算法將問題的解決方案視為一系列決策的結果,與貪婪演算法不同的是,在貪婪演算法中,每採用一次貪婪准則,便做出一個不可撤回的決策;而在動態規劃演算法中,還要考察每個最優決策序列中是否包含一個最優決策子序列,即問題是否具有最優子結構性質。
4. 關於搜索與dp的優化,或者其他高級演算法,請高手指導一下。
下面總結網站排名抄經驗,能看懂就看懂,看不懂的,自己琢磨,試驗。1.每個網頁標題簡潔,不超過30字。2.每個網頁核心關鍵詞不超過3個。如果可以,你要學會放棄。3.最重要的關鍵詞放在標題首位,依次類推。4.用旺道排名代替原始的人工優化。
5. 計算機考研復試會出DP的題嗎 感覺DP掌握的不是很好
dp雖然也屬於一大類題型啊,有出的可能但可能性不大。反正我是搞不大懂,死內記硬背了幾容個經典的背包問題的演算法,再就沒深究過,dp在ACM里屬於熱門題型,復試上機的話就算是出也應該很簡單
當然也要看什麼學校,建議你看看該校往年的上機題,揣摩一下
6. 大眾點評網中的優惠券圖片直接放在手機里給他們看可以嘛
阿我超愛DP網的~~~
你應該會看到~優惠券的那一欄~是有兩個選擇的~
一個是專列印的~另一個是手機下屬載的~~
列印就是。。列印=
=直接列印出來給他們看哈~
手機下載就是以彩信~下到手機上然後直接給他們看哈~~
所以說是可以的~~
7. 微觀經濟學中的dq比上dp是怎麼算的
dq/dp是求導的另一種寫法,本質就是對p(自變數)求導,也可以寫成q'。不能跳過中級。關於區別,舉幾個例子。
一、於由效用函數,求得需求函數
中級:列個什麼Lagrangian,求導,算得結果,交卷。
高級:先判斷u的性質,和budget constraint的性質(是否compact,要緊),論證解的存在性,然後在適當使用Kuhn Tucker condition 求得需求函數。進而考慮compensated demand。
研究者:我先捏一個需求函數,再翻書找什麼樣的效用函數可以得到這個需求函數。
二、關於博弈論
中級:畫個表,求什麼NE就行了。
高級:回想起不動點定理成立條件。
研究者:我說這個狀態是NE,它就是NE。
三、關於動態優化
中級:人類在t=2時滅絕。
高級:一個人可以永遠活下去。列出Bellman equation。
研究者:我只關心動態軌跡畫出來是不是很優美,關於模型的不確定性。
中級:不確定性就跟扔骰子一樣。
高級:我先要定義一個sigma-algebra……
研究者:只認識Normal Distribution(其它distribution一般都會導致模型不可解)。
(7)dp演算法優惠券擴展閱讀:
一、詳細演算法
1、價格彈性公式是 e = dlnQ/dlnP = dQ/dP * P/Q
其中第一項表示價格微小的變化所引起的數量的變化 是數量對於價格在該點的導數
如果數量詳細演算法是價格的連續可導函數Q = Q(P)
那麼第一項就是 dQ/dP = dQ(P)/dP 然後把該點的(P,Q) 代入 就可以算出其彈性
2、如果沒有學過導數.那就沒有辦法了
簡單一點的常用一點的是線性需求函數 Q = a - bP,a,b>0
dQ/dP = -b
那麼(P0,Q0)點的彈性是
e = -b * P0/Q0
二、微觀經濟學產生發展
1、微觀經濟學的發展,迄今為止大體上經歷了四個階段:
第一階段:17世紀中期到19世紀中期,是早期微觀經濟學階段,或者說是微觀經濟學的萌芽階段。
第二階段:19世紀晚期到20世紀初葉,是新古典經濟學階段,也是微觀經濟學的奠定階段。
第三階段:20世紀30年代到60年代,是微觀經濟學的完成階段。
第四階段:20世紀60年代至今,是微觀經濟學的進一步發展、擴充和演變階段。
2、通觀微觀經濟學的發展過程與全部理論,始終圍繞著價格這一核心問題進行分析,所以微觀經濟學在很多場合又被稱為「價格理論及其應用」。
8. 有誰知道順網科技網路游戲DP值具體演算法
您好,全局DP值,是所有網吧伺服器從網維官方下載游戲後,的游戲點擊率.
本地DP值,只是計算你網吧內玩家玩的游戲點擊率
這個只是計算的范圍不同而以
DP值的計算是通過業務伺服器來計算的。
選我吧!!
9. 你好,我是新手,不太了解這些,想請教下,DP 是什麼意思,還有關於ACM,您有什麼好的方法嗎
DP是動態復規劃。。是acm中一個非制常非常重要的演算法。。
我們老師說 不會DP和搜索 永遠是菜鳥。。。
DP是一種思想,就是把復雜的問題 分解成很多簡單子問題,解決了所有子問題就相當於解決了大問題。。。
關於acm。。
先學一門語言。。完了去各大OJ刷水題(就是做簡單題,幾乎不牽扯演算法的題。),鍛煉邏輯思維,鍛煉思維的縝密,鍛煉代碼能力。。
我們老師說先刷500道水題在學演算法。= =~! 覺得有點……。。
(就是告訴我們先多刷水題。。。)
水題杭電OJ 很多(11頁和16頁有中文水題,適合新手)。。http://acm.h.e.cn
水題刷的差不多了,在學 演算法,數據結構。。
演算法 先看 演算法導論。。之後再看看劉汝佳的 黑書(演算法藝術與信息學競賽)。
黑書 對新手來說很難,所以先看 演算法導論。。。
要是把這兩本書看好了 那你也算是一隻牛了。。
關鍵還是刷題。。