dp專題 簡單基礎dp 揹包

2021-07-10 05:42:00 字數 2078 閱讀 7438

按照這個做的:

hdu 1864 最大報銷額

01揹包

方法一:

double型別的揹包

總數30個、每個最大1000、保留2位有效位。直接把double*100轉換為int型的揹包

**

//看清題目

//double型的01揹包

#include

#include

#include

using namespace std;

const int n = 3000050;

int dp[n];

int a[n];

int main(void)

else if(c == 'b' && b+price <= 600.0)

else if(c == 'c' && c+price <= 600.0)

else

flag = 0;

}if(flag && a+b+c <= 1000.0)

a[cnt++] = (a+b+c)*100;

}int v = (total)*100;

for(i = 0; i < cnt; i++)

}double ans = dp[v];

printf("%.2lf\n", ans/100.0);

}return 0;

}

對個數揹包,dp[j] = max(dp[j], dp[j-1]+a[i]);

網上的**能ac但錯了的**,有後效性

這組就過不了

100.00 5

1 a:5

1 b:20

1 c:24

1 a:30

1 a:60

#include

#include

#include

using namespace std;

const int n = 100;

double a[n];

double dp[n];

void debug(int n, double a)

printf("\n");

}int main(void)

else if(c == 'b' && price+b <= 600.0)

else if(c == 'c' && price+c <= 600.0)

else

flag = 0;

}if(flag && a+b+c <= 1000.0)

}for(i = 0; i < cnt; i++)

}double ans = 0;

for(i = 0; i <= cnt; i++)

ans = max(ans, dp[i]);

printf("%.2lf\n", ans);

}return 0;

}

方法二:

搜尋

//dfs+剪枝

#include

#include

#include

#include

using namespace std;

const int n = 100;

double a[n];

double sum[n];

double dfs(double total, int cnt)

else

ans = dfs(total, cnt-1);

return ans;

}int main(void)

else if(c == 'b' && b+price <= 600.0)

else if(c == 'c' && c+price <= 600.0)

else

flag = 0;

}if(flag && a+b+c <= 1000.0)

a[cnt++] = (a+b+c);

}for(i = 1; i < cnt; i++)

printf("%.2lf\n", dfs(total, cnt-1));

}return 0;

}

Dp基礎 簡單揹包問題

揹包問題大意 給你乙個揹包有一定的容量,再給你一下些物品,物品有自己的體積和價值,請你選擇價值和最大的一些物品 最體積不超過揹包的容量 揹包問題思路 逐漸放每乙個物品,找到當前體積的最大價值。揹包問題的主要 for i 1 i n i 逐漸放乙個物品 for j m j w i j 列舉揹包放下這個...

DP 揹包專題 揹包九講

這段時間看了 揹包九講 在hust vjudge上找到了乙個題單,挑選了其中16道題集中做了下,選題全部是hdu上的題,大多是簡單題。目前做了點小總結,大概提了下每道題的思路重點部分,希望以後回看回想時能有幫助。題單 hdu 1059 hdu 1114 hdu 1171 hdu 1203 hdu 1...

DP經典例題 揹包專題

揹包的基本模型 給你乙個容量為v的揹包和若干種物品,在一定的限制條件下 每種物品都占用一定容量 問最多能放進多少價值的物品?題意 有n個重量和價值分別為wi,vi,從這些物品中挑選總重量不超過w的物品,使其價值最大,輸出價值最大值 其中每個物品最多只能放一件 這題其實用dfs也可以做,但超時 確認子...