hdu1176 免費餡餅 nyoj613 免費餡餅
免費餡餅
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 59010 Accepted Submission(s): 20706
Problem Description都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10米範圍內。餡餅如果掉在了地上當然就不能吃了,所以gameboy馬上卸下身上的揹包去接。但由於小徑兩側都不能站人,所以他只能在小徑上接。由於gameboy平時老呆在房間裡玩遊戲,雖然在遊戲中是個身手敏捷的高手,但在現實中運動神經特別遲鈍,每秒種只有在移動不超過一米的範圍內接住墜落的餡餅。現在給這條小徑如圖示上座標:
為了使問題簡化,假設在接下來的一段時間裡,餡餅都掉落在0-10這11個位置。開始時gameboy站在5這個位置,因此在第一秒,他只能接到4,5,6這三個位置中其中一個位置上的餡餅。問gameboy最多可能接到多少個餡餅?(假設他的揹包可以容納無窮多個餡餅)
Input輸入資料有多組。每組資料的第一行為以正整數n(0<n<100000),表示有n個餡餅掉在這條小徑上。在結下來的n行中,每行有兩個整數x,T(0<T<100000),表示在第T秒有一個餡餅掉在x點上。同一秒鐘在同一點上可能掉下多個餡餅。n=0時輸入結束。
Output每一組輸入資料對應一行輸出。輸出一個整數m,表示gameboy最多可能接到m個餡餅。
提示:本題的輸入資料量比較大,建議用scanf讀入,用cin可能會超時。
Sample Input65 14 16 17 27 28 30
Sample Output4
Author
/* 類似超級臺階那種遞進的原理 定義陣列dp【i】【j】表示第i秒在位置j處獲得的最大餡餅數,因為起點是確定的, 可以把問題逆向思考這樣來看:起點無所謂,但是終點一定要到達位置,求最大接餡餅數, 也就是說,把時間也逆著來看。那麼不難寫出狀態轉移方程: DP【i】【j】=max(dp【i+1】【j】,dp【i+1】【j-1】,dp【i+1】【j+1】)+a【i】【j】; 解釋上述狀態轉移方程:假設人物在第i秒的時候處於j位子,(因為逆序考慮問題了), 那麼人物在第i+1秒的時候處在j,j-1,j+1的位子都可以在第i秒的時候到達位子j。 注意處理j==0和j==10的時候的特殊情況 */ #include<stdio.h> #include<string.h> #include<iostream> using namespace std; int dp[100005][15]; int a[100005][15];//a[時間][位置] int main() { int n,i,j,maxntime; while(~scanf("%d",&n)&&n) { memset(dp,0,sizeof(dp)); memset(a,0,sizeof(a)); int x,y; maxntime=0; for(i=0;i<n;i++) { scanf("%d%d",&x,&y); a[y][x]++; maxntime=max(maxntime,y);//找到本組測試資料中最長的時間 } for(i=maxntime;i>=0;i--)//以時間為軸 { for(j=0;j<11;j++)//迴圈位置 { if(i==maxntime) dp[i][j]=a[i][j];//初始化dp陣列 if(j==0)//上一步只能從原點,或者右邊來 { dp[i][j]=max(dp[i+1][j],dp[i+1][j+1])+a[i][j]; continue; } else if(j==10)//上一步只能從原點,或者左邊來 { dp[i][j]=max(dp[i+1][j],dp[i+1][j-1])+a[i][j]; continue; } else dp[i][j]=max(dp[i+1][j],max(dp[i+1][j-1],dp[i+1][j+1]))+a[i][j]; } } printf("%d\n",dp[0][5]);//回到“終點” } return 0; }
相關推薦
hdu1176 免費餡餅 nyoj613 免費餡餅
免費餡餅Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 59010 Accepted Submission(s
HTTPS 免費證書,免費 ssl 證書,FreeSSL.org 申請多種免費證書
https 免費https證書 免費證書 freessl 隨著互聯網的日益發展,它已經深入的人們生活的方方面面,可以說我們已經離不開互聯網了。面對人類如此的依賴,互聯網安全愈發的重要,個人隱私也愈發的需要保護起來。如何才能提高我們上網的安全呢?如何保護我們上網的隱私?如何防止被黑客劫持?等等,
亞馬遜AWS免費套餐_免費雲服務
† 以下 Windows 變體不符合使用免費套餐的條件:Microsoft Windows Server 2008 R2 with SQL Server Web、Microsoft Windows Server 2008 R2 with SQL Server Standa
DP 免費餡餅 HDU1176
DP 免費餡餅 HDU1176 vjudge題面 一道基本的DP題,狀態轉移很好想,每一個狀態的位置\(pos\)都只能由上一秒的\(pos-1, pos, pos+1\)三個位置轉移而來(當然要判斷邊界情況),這種簡單的轉移就直接寫程式碼寫死就行了,不需要像其他DP,還需要一個迴圈來專門決策。另外,這種
kuangbin專題十二 HDU1176 免費餡餅
之前的dp專題有這道題,當時沒有寫出來,剛才第一次寫了正推的程式碼。沒有考慮到只能從5開始,WA。後來改了倒推。改了中間的小bug,過了。 思路:在一個點,可以接到 左中右 三個位置的餡餅,為了避免邊界處理,把可能下落的點0~10變為 1~11。 這樣1的 左中右 就
ACM-DP之免費餡餅——HDU1176
免費餡餅 Problem Description 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10米範圍內。餡餅如果掉在了地上當然就不能吃了,所以gameb
免費餡餅(HDU1176)
一道簡單的DP,時間是線性的,是一條天然的序列,那麼影響決策的因素只有時間和位置,已經知道初始位置在5,可得到狀態方程dp[i][j] = max{dp[i][j]+a[i][j],dp[i+1][j]+a[i][j],dp[i+1][j-1]+a[i][j],dp[i+1
hdu1176 免費餡餅
題意: 在一條線上一個人最初在5點,美妙只能向兩邊移動一個位置,給你每個時間段掉餡餅的個數,問最後可以接到多少個餡餅。 一個變形的數塔問題,最上面是一個頂點,每個時間是一層轉移。 #inclu
杭電 1176 免費餡餅
sizeof 提示 () tom 一個 行為 cpp 多少 inpu http://acm.hdu.edu.cn/showproblem.php?pid=1176 免費餡餅 Time Limit: 2000/1000 MS (Java/Others) Memo
hdu-1176 免費餡餅
miss tom pre 遲鈍 其中 一點 運動 高手 超時 題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=1176 題目類型: DP 題意概括: 一條路只有0-10號位置,一個人初始位置為5號位置,每一秒都有若幹
nyoj 613 免費餡餅
輸入數據 ems sizeof cnblogs 限制 esp 最大 ios max 免費餡餅 時間限制:1000 ms | 內存限制:65535 KB 難度:3 描述 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來game
免費餡餅
div 超時 移動 space 敏捷 courier 正整數 round sample 免費餡餅 時間限制:1000 ms | 內存限制:65535 KB 難度:3 描寫敘述都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上。忽然天上掉下大把
hdu 1176 免費餡餅(DP)
身旁 post ++ scanf sim onos mon 一秒 strong 免費餡餅 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
HDU 1176 免費餡餅(簡單DP)
高手 好想 現實 免費餡餅 size set 所有 clu 玩遊戲 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10米範圍內。餡餅如果掉在了地上當然就不能吃
HDU 1176 免費餡餅
IT AS 轉移 turn str pac 遞推 去掉 ++ 令dp[i][j]為i時刻j位置時的最大餡餅量。由於每個狀態只能由臨近的3個狀態轉移而來,所以可以較為簡單的確定遞推式。 第一個要思考的點:正推還是逆推?逆推的好,正推的話不知哪些狀態可走,而逆推的話,是在當前
[bzoj2131]免費的餡餅_樹狀數組
-s size ask bit mil 最大 hash unique ret 免費的餡餅 bzoj-2131 題目大意: 註釋:$1\le n \le 10^5$,$1\le w \le 10^8$。 想法:首先,想到dp 狀態:dp[i][j]表示i分鐘在位置
bzoj2131: 免費的餡餅
change == main owb family ace node cmp col 首先我們很容易看出是一個DP 然後容易看出是數據結構優化DP 但是這個限制條件有點鬼畜: abs(p[i]-p[j])/2<=(t[i]-t[j]) p[i]>p[j]
sincerit 1176 免費餡餅
免費餡餅 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 65273 Accepted Submission(s): 22953 Pro
免費的餡餅(二維偏序)(樹狀陣列版)
https://vjudge.net/contest/261263#problem/B(題目連結) 因為一秒可以走1或2步或不走。 我們可以看成半秒走1步或不走。 dp[i]表示接到第i塊餅時最大的分數值 現在有兩塊餅它們下落的時間為ti,tj,位置為pi,pj; 假設ti &g
HDU - 1176 免費餡餅(dp 倒數塔 簡單題)
題目連結 簡單的dp題; 題意:每分鐘能得到一個位置上的餅,問最終最多能得到多少; 把每分鐘的看成一層數塔,然後從最後一分鐘往下推; 每次比較往前走,不走,往後走三個位置; #include <iostream> #include <cstdi