标签:style blog class c code tar
题目链接:
题目为:

6 5 1 4 1 6 1 7 2 7 2 8 3 0
4
则状态转移方程为:
dp[i][j]+=max(max(dp[i+1][j],dp[i+1][j-1]),dp[i+1][j+1]);当在最边上时则单独考虑:
dp[i][0]+=max(dp[i+1][0],dp[i+1][1]);
dp[i][10]+=max(dp[i+1][9],dp[i+1][10]);
则代码为:
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=100000+10;
int dp[maxn][11];
int main()
{
int i,j,n,Max,t,x;
while(scanf("%d",&n)!=EOF&&n)
{
memset(dp,0,sizeof(dp));
Max=0;
for(i=1;i<=n;i++)
{
scanf("%d%d",&x,&t);
++dp[t][x];
Max=max(Max,t);
}
for(i=Max-1;i>=0;i--)
{
for(j=1;j<=9;j++)
{
dp[i][j]+=max(max(dp[i+1][j],dp[i+1][j-1]),dp[i+1][j+1]);
printf("%d\n",dp[i][j]);
}
dp[i][0]+=max(dp[i+1][0],dp[i+1][1]);
dp[i][10]+=max(dp[i+1][9],dp[i+1][10]);
printf("%d %d\n",dp[i][0],dp[i][10]);
}
printf("%d\n",dp[0][5]);
}
return 0;
}
标签:style blog class c code tar
原文地址:http://blog.csdn.net/u014303647/article/details/26285851