概述
思路:a[i][j]表示j秒在i位置的数目,dp[i][j]表示j秒在i位置最大可以收到的数目。
转移方程:d[i][j]=max(dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1]);
1 #include<iostream> 2 #include<string> 3 #include<algorithm> 4 #include<cstdlib> 5 #include<cstdio> 6 #include<set> 7 #include<map> 8 #include<vector> 9 #include<cstring> 10 #include<stack> 11 #include<cmath> 12 #include<queue> 13 #include <bits/stdc++.h> 14 using namespace std; 15 #define INF 0x3f3f3f3f 16 #define ll long long 17 #define clc(a,b) memset(a,b,sizeof(a)) 18 const int maxn=100010; 19 int a[maxn][11]; 20 int dp[maxn][11]; 21 int n; 22 int main() 23 { 24 while(~scanf("%d",&n),n) 25 { 26 int x,y; 27 int time=0; 28 int maxx=0; 29 clc(a,0); 30 clc(dp,0); 31 for(int i=0;i<n;i++) 32 { 33 scanf("%d%d",&x,&y); 34 a[y][x]++; 35 time=max(time,y); 36 } 37 dp[1][4]=a[1][4]; 38 dp[1][5]=a[1][5]; 39 dp[1][6]=a[1][6]; 40 for(int i=2;i<=time;i++) 41 { 42 for(int j=0;j<11;j++) 43 { 44 dp[i][j]=dp[i-1][j]; 45 if(j>0) 46 dp[i][j]=max(dp[i][j],dp[i-1][j-1]); 47 if(j<10) 48 dp[i][j]=max(dp[i][j],dp[i-1][j+1]); 49 dp[i][j]+=a[i][j]; 50 } 51 } 52 for(int i=0;i<11;i++) 53 { 54 if(maxx<dp[time][i]) 55 maxx=dp[time][i]; 56 } 57 printf("%dn",maxx); 58 } 59 }
转载于:https://www.cnblogs.com/ITUPC/p/5173530.html
最后
以上就是寒冷酒窝为你收集整理的HDU 1117 免费馅饼 二维动态规划的全部内容,希望文章能够帮你解决HDU 1117 免费馅饼 二维动态规划所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复