動態規劃入門 DP基礎

2021-07-11 08:46:03 字數 3016 閱讀 3701

1,

#include

using namespace std;

int main()

int solve(int i,int j)

int main()

float p,pj,q,qj;

int n,mj;

float dp[

5000

];int

main

()dp[0]=

1;for(

int i=

1;i<=n;i++)

for(

int j=v;j>=vol[i];j--)

dp[j]=

max(dp[j],dp[j-vol[i]]*val[i]);

int i;

for(i = v; i>=

0;i--)

}cout<}return0;

}

最大報銷額

還是01揹包問題,這裡面有特殊,就是cost和weight(價值)是相同的,v是可以報銷的錢數

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 10000+5

#define ull unsigned

long

long

#define ll long

long

#define

rep(i,n)

for(i=

1;i<=n;i++)

#define

rep(i,n)

for(i=

0;i#define

cle(a)

memset

(a,0

,sizeof

(a))

#define mod 90001

#define pi 3.141592657

const

ullinf = 1ll <<61;

const

double eps=

1e-5

;using

namespace std;

bool

cmp(

int a,

int b)

double q;

int n;

int dp[

3000005

],mark,f[

32],p;

int num;

char s,c;

float a,suma,sumb,sumc;

intmain()}

if(mark||(suma+sumb+sumc)

>

1000||suma>600||sumb>600||sumc>600)continue;

f[p++]=

100*(suma+sumb+sumc);

}for

(int i=

0;ifor(

int j=q*

100;j>=f[i];j--)

int t=q*

100;

cout

)<0.01

<}return0;

}

max sum

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define maxn 10000+5

#define ull unsigned

long

long

#define ll long

long

#define

rep(i,n)

for(i=

1;i<=n;i++)

#define

rep(i,n)

for(i=

0;i#define

cle(a)

memset

(a,0

,sizeof

(a))

#define mod 90001

#define pi 3.141592657

const

ullinf = 1ll <<61;

const

double eps=

1e-5

;using

namespace std;

bool

cmp(

int a,

int b)

int a[

100005

];int sum[

100005

];int

main

()sum[

1]=a[1];

int x=

1,start=

1,end=1;

int max1=a[1];

for(

int i=

2;i<=n;i++)

else sum[i]=sum[i-1

]+a[i];

if(sum[i]>max1)

}cout<<

"case "

<":"

}

這道題的狀態轉移方程為  sum[i]=max(sum[i-1]+a[i],a[i])    值得注意的是怎麼儲存開始和結束點的位置

動態規劃入門(dp)

dp的基本思想,是把大問題轉化成乙個個小問題,然後遞迴解決。所以本質思想的話還是遞迴。dp最重要的是要找到狀態轉移方程,也就是把大問題化解的過程。舉個例子 乙個數字金字塔 112 2332 2243 133 在上面的數字三角形中尋找一條從頂部到底邊的路徑,使得路徑上所經過的數字之和最大。路徑上的每一...

動態規劃入門

1 用 dp 做的題大多數返回值是int boolean,求max min,不能打亂原來輸入順序。2 動態規劃有兩個重要定義,乙個叫 optimal substructure 另乙個叫 overlap subproblem 各種排序 tree 類問題中,都會用到 divide conquer 的思想...

動態規劃入門

大家可以看看這篇文章dp,哪個更容易理解就看哪個!一 動態規劃的定義 動態規劃程式設計是一種針對於解決最優化問題的一種途徑 一種方法,而不是一種特殊演算法,也就是說它沒有固定的模板。在動態規劃中,每走一步都要看看能不能最優,而且動態規劃最擅長的就是多階段問題!二 動態規劃的基本概和基本模型構成 1....