POJ 1157 动态规划
2014-07-17 11:48
295 查看
题意:用若干束花和花瓶,每种花装到对应的花瓶中都有一个相应的观赏价值,给出每种花装到每种花瓶中的观赏值,求出能达到的最大观赏价值。另外,每种花和花瓶都有其序号,序号大的花只能放在序号小的花的后面的花瓶中。
思路:用dp[i][j]表示将前i束花放到前j个花瓶中的最大观赏价值。枚举最后一束花,最后一束花能放到的位置为k,i<=k<=j,所以状态转移方程是
dp[i][j] = max{dp[i-1][k-1] + a[i][k]} (i <= k <= j)
思路:用dp[i][j]表示将前i束花放到前j个花瓶中的最大观赏价值。枚举最后一束花,最后一束花能放到的位置为k,i<=k<=j,所以状态转移方程是
dp[i][j] = max{dp[i-1][k-1] + a[i][k]} (i <= k <= j)
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <ctype.h> #include <cstring> #include <string> #include <queue> #include <cmath> #define MAXN 110 #define INF 2147000000 #define pu system("PAUSE") #pragma comment(linker, "/STACK:16777216"); using namespace std; int f, v; int a[MAXN][MAXN]; int dp[MAXN][MAXN]; int main() { //freopen("C:/Users/Admin/Desktop/in.txt", "r", stdin); while(cin >> f >> v) { for(int i = 0; i < f; i++) for(int j = 0; j < v; j++) { cin >> a[i][j]; } for(int i = 1; i <= f; i++) { for(int j = i; j <= v; j++) { dp[i][j] = -INF; dp[1][1] = a[0][0]; for(int k = i; k <= j; k++) { dp[i][j] = max(dp[i][j], dp[i-1][k-1]+a[i-1][k-1]); } } } cout << dp[f][v] << endl; } return 0; }
相关文章推荐
- 【原】 POJ 1157 LITTLE SHOP OF FLOWERS 动态规划 解题报告
- poj 1157 LITTLE SHOP OF FLOWERS 动态规划
- POJ 1157 LITTLE SHOP OF FLOWERS(动态规划)
- poj 动态规划DP - 1157 LITTLE SHOP OF FLOWERS
- POJ 1157 LITTLE SHOP OF FLOWERS (插画的最大值_经典的动态规划DP)
- Poj 1157(动态规划)
- poj 1157(SGU 104) 动态规划(花瓶插花)
- POJ-1157 LITTLE SHOP OF FLOWERS(动态规划)
- POJ 1157动态规划简单DP
- POJ 1157 LITTLE SHOP OF FLOWERS(动态规划)
- POJ 1157 LITTLE SHOP OF FLOWERS(动态规划)
- POJ 1157 - LITTLE SHOP OF FLOWERS (动态规划)
- POJ 1157 LITTLE SHOP OF FLOWERS(动态规划)
- POJ-1157 LITTLE SHOP OF FLOWERS(动态规划)
- POJ-1157 LITTLE SHOP OF FLOWERS(动态规划)
- poj 1157 简单动态规划
- Poj 1088 滑雪(经典动态规划)
- POJ 2479(动态规划) [求最大子段和 的延伸]
- POJ - 1042 Gone Fishing 钓鱼 动态规划(DP)
- poj 百练1088滑雪路线问题 动态规划