1. 程式人生 > >1644 免費餡餅 題解(c++)(S.B.S.)

1644 免費餡餅 題解(c++)(S.B.S.)

1644 免費餡餅(巴蜀oj上的編號)

  題面:

         SERKOI最新推出了一種叫做“免費餡餅”的遊戲。         遊戲在一個舞臺上進行。舞臺的寬度為W格,天幕的高度為H格,遊戲者佔一格。開始時,遊戲者站在舞臺的正中央,手裡拿著一個托盤。          遊戲開始後,從舞臺天幕頂端的格子中不斷出現餡餅並垂直下落。遊戲者左右移動去接餡餅。遊戲者每秒可以向左或右移動一格或兩格,也可以站在願地不動。          餡餅有很多種,遊戲者事先根據自己的口味,對各種餡餅依次打了分。同時在8-308電腦的遙控下,各種餡餅下落的速度也是不一樣的,下落速度以格/秒為單位。當餡餅在某          一秒末恰好到達遊戲者所在的格子中,遊戲者就收集到了這塊餡餅。          寫一個程式,幫助我們的遊戲者收集餡餅,使得收集的餡餅的分數之和最大。  輸入資料:         第一行:寬度W(1~99奇數)和高度H(1 ~ 100整數)        接下來給出了一塊餡餅資訊。由4個正整陣列成,分別表示了餡餅的初始下落時刻、水平位置、下落速度、分值。         遊戲開始時刻為0。從1開始自左向右依次對水平方向的每格編號。  輸出資料:        收集到的餡餅最大分數之和。 ——————————————分割線———————————————————————————————————————————————————— 題解:
        由於餡餅下落的時間和速度都不同,人只能向左右移動,餡餅只能向下移動。人和餡餅都同時移動,思考起來比較複雜,因此我們需要轉變思路:        算出每個時刻落到最底層的每個格子有多少分值的餡餅。         如果將餡餅當成參照物,則餡餅向下落,可以看成餡餅不動,人往上走去摘取餡餅,這樣人每1時刻都可以走到上一行的5個格子,         這道題是經典動規模型數塔的變形,將餡餅落下的位置看做數塔中的列數,將下落的時間看做數塔中的行數,問題轉化為求解從塔底到塔頂的最長路徑。         計算出每個格子每個時刻可能達到的餡餅分值,填入W*H的天幕表。 程式碼:
#include<iostream>
#include
<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int w,h; struct pie { int time,pos,speed,value,t; }s[10001];//用結構體來記錄資料 int f[1001][1001];//記錄決策 int main() { cin>>w>>h; int n=1,ss,maxn=-999,ans=0; //while (scanf("%d%d%d%d",s[n].time,s[n].pos,s[n].speed,s[n].value)==4)
while (cin>>s[n].time>>s[n].pos>>s[n].speed>>s[n].value)//由於不知道資料個數,用while讀入 { s[n].t=ceil(h/s[n].speed)+s[n].time;//t指該餡餅下落下來(到最後一格)的時間 n++;//這一步核心意思就是將該時間取整,但是是加一位(2.....=3) } n-=1;//n為餡餅個數 for (int i=1;i<=n;i++) { f[s[i].pos][s[i].t]+=s[i].value; maxn=max(s[i].t,maxn);//找到最晚的餡餅的時間 } for (int j=maxn-1;j>=0;j--) for (int i=1;i<=w;i++) { if (f[i-2][j+1]&&i-2>0) ans=max(ans,f[i-2][j+1]); if (f[i-1][j+1]&&i>1) ans=max(ans,f[i-1][j+1]); if (f[i][j+1]) ans=max(ans,f[i][j+1]); if (f[i+2][j+1]&&i+2<=w) ans=max(ans,f[i+2][j+1]); if (f[i+1][j+1]&&i+1<=w) ans=max(ans,f[i+1][j+1]); f[i][j]+=ans;//狀態轉移方程應用 } cout<<f[w/2+1][0];//由於人以中間為起點,所以輸出(w/2+1,0) return 0; }

相關推薦

1644 免費餡餅 題解c++S.B.S.

1644 免費餡餅(巴蜀oj上的編號)   題面:          SERKOI最新推出了一種叫做“免費餡餅”的遊戲。         遊戲在一個舞臺上進行。舞臺的寬度為W格,天幕的高度為H格,遊

哈夫曼樹C++優先隊列的使用

name sub pan main 道理 輸出 tor 數據 排序。 給定n個權值作為n個葉子結點,構造一棵二叉樹,若帶權路徑長度達到最小,稱為哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。 構造 假設有n個權

AE開發之默認滾輪縮放功能反置C#修改註冊表數據

arcgis closed wheel engine user 直接 clas for sem ArcMap默認的滾輪縮放是向下放大,向上縮小 如果想修改成向上放大,向下縮小,直接在ArcMap-Customize-ArcMap Options裏, 將最下面的Mouse W

深度學習——deepNN模型實現攝像頭實時識別人臉表情C++和python3.6混合程式設計

一、背景介紹 最近需要做人臉識別方向的東西,就被分配了新的任務,利用攝像頭實時檢測人臉表情,並製作成一個小軟體,這裡當然要用C++實現,並用C++做成一個介面。 由於博主之前用python做過類似的小程式,因此這裡的模型實現主要採用了python,為了用C++實現介面,這裡採用C++呼叫py

c++繼承和組合,多型,虛擬函式c++後期繫結的本質

組合和繼承,實現了程式碼的可擴充套件性和相容性。 多型是在虛擬函式上得到了支援。 多型的原理,函式的呼叫繫結: 把函式的呼叫和函式體相關聯稱為捆綁。當捆綁是在程式執行之前完成的,稱為早期捆綁。c語言只支援早期繫結。晚期捆綁,物件通過自身得到類的資訊,然後找

學習筆記 c++ C++ 類模板的靜態成員

  程式碼: #include<iostream> using namespace std; template<typename T> class XYZ { public:     void putpri();     static

連結串列的插入和刪除操作詳解C語言實現+詳解註釋

連結串列的基本操作中,連結串列結點的插入和刪除相對比較複雜,需根據結點插入位置的不同,使用合理的方法在不破壞原連結串列結構的前提下將其插入到連結串列中。 本節將詳解介紹這兩種操作的具體實現方法,讀者只需牢記實現步驟,即可輕鬆解決這兩大難點。 連結串列中插入結點 連結串列中插入結點,根據插入位置的不同,可

二叉樹的鏈式儲存結構及實現C語言完整程式碼+詳細註釋

鏈式儲存結構儲存二叉樹,實際上就是採用連結串列儲存二叉樹。 既然是使用連結串列,首先需要構建連結串列中節點的結構。考慮到儲存物件為二叉樹,其各個節點最多包含 3 部分,依次是:左孩子、節點資料和右孩子,因此,連結串列的每個節點都由這 3 部分組成: 圖 1 二叉連結串列結點構成 圖 1 中,Lchi

銀行存款C語言,遞推法

題目: 母親為兒子sun 4年的大學生活準備了一筆存款,方式是整取零存,規定sun 每個月月底取下一個月的生活費。假設銀行年利息為1.71%,計算該母親每個月至少要存入多少錢? 演算法分析: 可採用逆推法分析存錢和取錢的過程,因為按照月為週期取錢,所以4年可以分

MongoDB——Aggregatesc#實現支援陣列欄位

c#實現 新增如下引用:本文引用版本為:Version=2.2.4.26 using MongoDB.Bson; using MongoDB.Driver; 構建聚合管道:要求能夠 返回指定條數記

矩陣取數遊戲noip2006c++ BigInteger的第一次運用---重點!!

今下午對c++BigInteger進行了初步的瞭解 同時,經過這次,我才深深的體會到了c++的靈活之處 1.對Biginteger的初步認識 2.對c++一些關鍵字的初步認識 3.對vector的一點長進和對這些容器的感覺整體框架加深 4.對operator的認識又加深了

第一章第二節c++語言的字符集與詞彙

字符集: C++語言的字符集是ASCII(American Standard Code for Information Interchange)碼的子集, 包括:26個英文字母的大小寫,10個數字和其他的字元。 關鍵字: 又叫做保留字,下面列舉出來C++語言中常用的關鍵字。全部的關鍵字可以查

漢諾塔C的經典遞迴習題

漢諾塔問題:設有三個塔座,依次命名為  x,y,z  。有  z  個直徑不同的圓盤,由小到大依次  編號為  1  、  2  、  ……  ,  n  。開始時,它們全部按遞減的次序插在塔座上。現

C語言列印圖形題5程式設計,輸入n,輸出如下例n=4所示的高和上底均為n的等腰梯形。

程式設計,輸入n,輸出如下例(n=5)所示的高和上底均為n的等腰梯形。                        ****                      ******        

1020 月餅C語言版 + 註釋 + 貪心演算法

月餅是中國人在中秋佳節時吃的一種傳統食品,不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算可以獲得的最大收益是多少。 注意:銷售時允許取出一部分庫存。樣例給出的情形是這樣的:假如我們有 3 種月餅,其庫存量分別為 18、15、

c++基礎知識C++Primer4th第四版中文版

學習C++使用的兩種開發工具1、codeblocks如果你希望開發工具的容量很小,建議使用這個工具。系統較小但功能很強,非常適合教學用。2、VS2015(自帶Update2)安裝檔案容量比較大,如果你希望學習和實際用的開發工具一致,建議使用這個開發工具。Win32控制檯應用程

關於網頁返回上一頁並重新整理的問題C#、WebForm、移動端

昨天碼程式碼時遇到一個問題,history.back()或go(x)、forward()之後,呼叫重新整理location.reload()方法,怎麼也跳轉不到上一個頁面。在此處寫出昨天產生的一些疑問以及自己的一些理解,希望大家能夠給出合理的指點,謝謝。實際需求為:完成一個選

圓周率的計算C語言版,絕對精華

#include<stdio.h>long a=10000,b,c=2800,d,e,f[2801],g;main(){ for(;b-c;) f[b++]=a/5; for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)

C語言】C語言中格式化字元的具體用法C語言中%的那些事

格式字元格式字元用以指定輸出項的資料型別和輸出格式。   格式字元控制: 說明:的sprintf(格式化後的字元,“%(長度)格式符”,格式化前的字元); 1,d格式符用來輸出十進位制數有以下幾種用法。: (1),%d按整數的實際長度輸出。 (2),%M

C語言-資料結構與演算法還原二叉樹

/*根據先序和中序遍歷輸出的字串還原二叉樹,然後輸出後序遍歷*/ #include<stdio.h> #include<stdlib.h> #define MAX 20 char preOrder[MAX] = "abdgcefh";//定義全域性變數,先序字串 char midOrd