標籤:程式 max highlight init queue space ios div htm
參考:http://blog.sina.com.cn/s/blog_61034ad90100encg.html
f[i][j]表示i時刻移動j次的情況,f[i][j] = Max(f[i - 1][j], f[i - 1][j - 1]) + int(a[i] == (j + 1) % 2) 表示這種情況下,接到最多蘋果為在上一時刻的情況下,此次不移動和移動的最大值,再加上當前的位置是否處在新出現的水果樹下。
// Study.cpp: 定義控制台應用程式的進入點。//#include "stdafx.h"#include <iostream>#include <vector>#include <unordered_map>#include <unordered_set>#include <queue>#include <string>#include <algorithm>#include <sstream>#include <set>#include <stack>#define INT_MAX 2147483647 // maximum (signed) int value#define INT_MIN (-2147483647 - 1) // minimum (signed) int value;#define Min(x,y) (x)<(y)?(x):(y)using namespace std;int n, k, f[1004][34] = { 0 }, a[1004], ans = 0;int Max(int a, int b){return a > b ? a : b;}void init(){cin >> n >> k;for (int i = 1; i <= n; i++) { cin >> a[i]; a[i] %= 2; }//處理樹的編號。}void dp(){int i, j, t;for (i = 1; i <= n; i++) { f[i][0] = f[i - 1][0] + int(a[i] == 1); }//初始化跳0次的情況。for (i = 1; i <= n; i++)for (j = 1; j <= min(i, k); j++)//j<=I;{//t = f[i - 1][j];//if (f[i - 1][j - 1]>t)t = f[i - 1][j - 1];//f[i][j] = t + int(a[i] == (j + 1) % 2);f[i][j] = Max(f[i - 1][j], f[i - 1][j - 1]);f[i][j] += int(a[i] == (j + 1) % 2);}for (i = 1; i <= n; i++){for (j = 1; j <= min(i, k); j++)//j<=I;{cout << f[i][j] << " ";}cout << endl;}for (i = 0; i <= k; i++) if (f[n][i]>ans)ans = f[n][i];cout << ans;}int main(){init();dp();system("pause");return 0;}
動態規劃——奶牛接蘋果