【SGU】SGU每日练1·Little shop of flowers【DP】
生活随笔
收集整理的這篇文章主要介紹了
【SGU】SGU每日练1·Little shop of flowers【DP】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目大意:
給你n*m的矩形(m >= n)
每個節點mp[i][j]有一個權值,從第一行走到最后一行,每一行只準選擇一個數且對于i行,所選數的列數要嚴格大于i-1行選擇的列數
問你最大權值是多少,并輸出選擇的n個列數
?
思路:
DP方程非常好想:DP[i][j] = max(DP[i][j - 1], DP[i - 1][j - 1] + mp[i][j]);
找路徑的話,可以每行可以從從i+1到m,也可以直接從i - 1開始找
也可以在DP里面做標記,狀態轉移的時候將此點記錄!
但是不能想的太無腦,你懂的
?
附上代碼;
#include <iostream> #include <stdio.h> #include <algorithm> #include <string.h> #include <string> #include <math.h> #include <stack> #include <queue> #include <vector> #include <map> #include <set> #pragma warning(disable:4996)#define Zero(a) memset(a, 0, sizeof(a)) #define Neg(a) memset(a, -1, sizeof(a)) #define All(a) a.begin(), a.end() #define PB push_back #define repf(i,a,b) for(int i = a;i <= b; i++) #define repff(i,a,b) for(int i = a; i < b; ++i) #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define root 1,n,1 #define ld rt << 1 #define rd rt << 1 | 1 #define ll long long #define MAXN 105 #define INF 0x3f3f3f3f #define mod 10007 using namespace std; vector<int>go; int n, m, dp[MAXN][MAXN], gg[MAXN][MAXN], mp[MAXN][MAXN]; void init(){memset(gg, 0, sizeof(gg));for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j){scanf("%d", &mp[i][j]);if(i != 0)dp[i][j] = -INF;else dp[i][j] = 0;}for (int i = 0; i <= n; ++i)for (int j = 0; j <= m; ++j){if (i != 0)dp[i][j] = -INF;else dp[i][j] = 0;}go.clear(); }int main(){while (~scanf("%d%d", &n, &m)){init();for (int i = 1; i <= n; ++i)for (int j = 1; j <= m; ++j){if (dp[i - 1][j - 1] + mp[i][j] > dp[i][j - 1]){gg[i][j] = 1;//cout << "go" << endl;dp[i][j] = dp[i - 1][j - 1] + mp[i][j];}else{dp[i][j] = dp[i][j - 1];}}printf("%d\n", dp[n][m]);int nowx = n,nowy = m;while (nowx && nowy){if (gg[nowx][nowy] == 1){go.push_back(nowy);nowx--;nowy--;}else{nowy--;}}int len = go.size();for (int i = len - 1; i >= 0; --i){if (i != len - 1) printf(" ");printf("%d", go[i]);}puts("");}return 0; }?
轉載于:https://www.cnblogs.com/mashiroG/p/4663020.html
總結
以上是生活随笔為你收集整理的【SGU】SGU每日练1·Little shop of flowers【DP】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构基础(16) --树与二叉树
- 下一篇: GConf error:Failed t