1. 程式人生 > >hdu1176 免費餡餅 nyoj613 免費餡餅

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