日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

poj 2385

發布時間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poj 2385 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一共有 2 棵蘋果樹,
一頭奶牛站在其中一棵蘋果樹下等待蘋果落下,
由于任意一個時刻只能站在一棵樹下,它從一棵樹移動到另外一棵樹的時間不計,

奶牛不愿意太頻繁移動,現在給定蘋果的下落次序和最大移動次數,問奶牛最多可以抓住幾個蘋果。

/*16ms,388KB*/#include<cstdio> #include<algorithm> using namespace std;int dp[31];///dp[i]表示進行了i次移動后接到(吃掉)的蘋果數的最大值 ///偶數為第一棵樹,奇數為第二棵樹 ///所以開一個一維數組就行int main() {int i, n, w, tree;scanf("%d%d", &n, &w);while (n--){scanf("%d", &tree);if (tree == 1){for (i = 2; i <= w; i += 2)///第一棵樹dp[i] = max(dp[i], dp[i - 1]) + 1;///要么不換位置,要么換位置++dp[0];///不進行任何移動時所能接到的蘋果數}else{for (i = 1; i <= w; i += 2)///第二棵樹dp[i] = max(dp[i], dp[i - 1]) + 1;}//for (i = 0; i <= w; ++i)//printf("%d\t", dp[i]);//putchar(10);//putchar(10);}printf("%d\n", max(dp[w - 1], dp[w]));return 0; }

給出t與w
接著t行給出1,2分別代表那分鐘是那棵樹掉落了蘋果

解題思路:每次奶牛只有兩種決策,在某一分鐘的時候轉移或者不轉移,我們只要知道前面分鐘兩者之間的最大值,繼而可以得到當前狀態的最大值
動態規劃設dp[T][W]代表第T分鐘的時候移動W次的所得到的最大蘋果數
那么狀態轉移方程為:
dp[T][W] = max(dp[T-1][W] + (a[T]==W%2+1),dp[T-1][W-1]+(a[T]==W%2+1))
a[T]==W%2+1,是看當前轉移了W次后在哪棵樹下,當前能不能得到這個蘋果

#include <stdio.h> #include <string.h> #define MAXT 1010 #define MAXW 35int dp[MAXT][MAXW]; int a[MAXT];int main(){int t,w,i,j;while(~scanf("%d%d",&t,&w)){dp[0][0] = 0;for(i = 1;i <= t;i++){scanf("%d",&a[i]);dp[i][0] = dp[i-1][0] + (a[i]==1); //若不轉移數為0,那么i時刻內得到的蘋果是第一棵樹掉落的蘋果總數}for(i = 1;i<=w;i++) dp[1][i] = 1; //轉移一次以上,那么第一分鐘內的都可以得到1個蘋果for(i = 2;i <= t;i++){for(j = 1;j <= w;j++){dp[i][j] = dp[i-1][j]+(a[i]==j%2+1); //若在i分鐘的時候轉移到另一顆樹上if(dp[i][j] < dp[i-1][j-1] + (a[i]==j%2+1)){ //若在i分鐘的時候不轉移到另一顆樹上可以得到最大dp[i][j] = dp[i-1][j-1] + (a[i]==j%2+1);}}}printf("%d\n",dp[t][w]);}return 0; }

總結

以上是生活随笔為你收集整理的poj 2385的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。