hdu-acm steps 免费馅饼

/*dp入门级的题目,和数塔是一样的,这道题不用做什么优化,感觉时间复杂度不会超。主要还是细节上的问题,

这道题的状态和状态方程都容易找到,采用自底向上的方式会好很多*/

#include"iostream"
#include"algorithm"
#include"stdio.h"
#include"string.h"
#include"cmath"
#include"queue"
#define mx 100005
using namespace std;
int dp[13][mx];//刚开始把13和mx写反了。。。wa了两次
int n;
int Max(int c,int b)
{
if(c>b) return c;
else return b;
}
int main()
{
while(cin>>n,n)
{
int i,j,k;
memset(dp,0,sizeof(dp));
int x,t,t1;
t=0;
for(i=0;i<n;i++)
{
cin>>x>>t1;
dp[x+1][t1]++;
if(t1>t) t=t1;//这里要注意输入不一定是按时间递增的顺序
}
for(i=t;i>0;i--)
for(j=1;j<=11;j++)
{
dp[j][i-1]+=Max(dp[j-1][i],Max(dp[j][i],dp[j+1][i]));
}
cout<<dp[6][0]<<endl;
}
return 0;
}

时间: 2024-11-14 16:16:50

hdu-acm steps 免费馅饼的相关文章

HDU ACM 1176 免费馅饼

分析:可以采用自底向上的方法也可以采用自顶向下的方法,这里采用第二种 #include<iostream> using namespace std; int dp[15][100010]; int main() { int i,j,maxt,t,n,x,temp; while(scanf("%d",&n) && n) { maxt=0; memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { scanf(&qu

hdu ACM Steps 1.2.8 Balloon Comes!

水题 #include<cstdio> char s[10]; int T,a,b,res; int main() { scanf("%d",&T); while(T--) { scanf("%s%d%d",s,&a,&b); switch (s[0]) { case '+' : printf("%d\n",a+b); break; case '-' : printf("%d\n",a-b)

hdu ACM Steps 1.3.1 第二小整数

水题. 我还以为是快速选择,但快排直接就过了. #include<cstdio> #include<algorithm> using namespace std; const int maxn = 500000 + 10; int a[maxn]; int T,n; int main() { scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;i++

hdu ACM Steps 1.2.5 find your present (2)

基础题.异或. 这道题很简单.但一开始我并没有想到O(n)的算法,然后排序tle了一发. 后来一直在想怎么使得俩个相同数互相"抵消"掉,灵机一动,发现这是异或. #include<cstdio> #include<algorithm> using namespace std; const int maxn = 100000 + 10; int a,n,ans; int main() { while(scanf("%d",&n) &am

hdu ACM Steps 1.2.4 Box of Bricks

模拟题. 题意为把高度不同的砖头堆变成高度相同的砖头堆最少需要移动几次. 想想就知道,要把每个砖头堆变成平均高度砖头堆最少需要移动的块数就是俩者的差值. 把所有差值都加起来以后要除以2,因为移动一块砖头对俩个砖头堆有影响. #include<cstdio> #include<cmath> const int maxn = 100 + 10; int a[maxn],n,s,h,ans,kase; int main() { while(scanf("%d",&am

hdu ACM Steps 1.2.3 A+B Coming

模拟题. 16进制转化为10进制相加.toupper函数为小写转换为大写,isalpha函数判断是否为字母. #include<cstdio> #include<cstring> #include<cctype> using namespace std; const int maxn = 100 + 10; const int base = 16; char s[5][maxn]; int a,b; int trans(int m) { int ans=0,n=strl

hdu 1176 免费馅饼(数塔类型)

http://acm.hdu.edu.cn/showproblem.php?pid=1176 免费馅饼 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 33362    Accepted Submission(s): 11410 Problem Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上

[2016-03-29][HDU][1176][免费馅饼]

时间:2016-03-29 09:46:34 星期二 题目编号:[2016-03-29][HDU][1176][免费馅饼] #include <algorithm> #include <cstring> #include <cstdio> using namespace std; const int maxt = 100000 + 10; int dp[maxt][11]; int a[maxt][11]; int main(){ int n,x,t,maxT; whi

HDU 1176免费馅饼 DP数塔问题转化

L - 免费馅饼 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 1176 Appoint description:  prayerhgq  (2015-07-28) System Crawler  (2015-11-21) Description 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.