杭电1176为什么我的代码老是wrong answer???
#include<iostream>#include<cstdio>#include<algorithm>usingnamespacestd;intdp[100005][...
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[100005][15];
int maxf(int a,int b,int c)
{
a=a>=b?a:b;
a=a>=c?a:c;
return a;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
int x=0;
int time=0;
int t=-1000;
dp[0][5]=0;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&x,&time);
dp[time][x]=1+dp[time][x];
if(time>t) t=time;
}
for(int i=t-1;i>=0;i--)
{
if(i<5)
{
for(int j=5-i;j<=5+i;j++)
{
dp[i][j]=maxf(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+dp[i][j];
}
}
else
{
dp[i][0]=dp[i+1][0]>dp[i+1][1]?dp[i+1][0]:dp[i+1][1];
dp[i][10]=dp[i+1][9]>dp[i+1][10]?dp[i+1][9]:dp[i+1][10];
for(int j=1;j<=9;j++)
{
dp[i][j]=maxf(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+dp[i][j];
}
}
}
printf("%d\n",dp[0][5]);
memset(dp, 0, sizeof(dp));
}
return 0;
} 展开
#include<cstdio>
#include<algorithm>
using namespace std;
int dp[100005][15];
int maxf(int a,int b,int c)
{
a=a>=b?a:b;
a=a>=c?a:c;
return a;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF&&n!=0)
{
int x=0;
int time=0;
int t=-1000;
dp[0][5]=0;
for(int i=1;i<=n;i++)
{
scanf("%d %d",&x,&time);
dp[time][x]=1+dp[time][x];
if(time>t) t=time;
}
for(int i=t-1;i>=0;i--)
{
if(i<5)
{
for(int j=5-i;j<=5+i;j++)
{
dp[i][j]=maxf(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+dp[i][j];
}
}
else
{
dp[i][0]=dp[i+1][0]>dp[i+1][1]?dp[i+1][0]:dp[i+1][1];
dp[i][10]=dp[i+1][9]>dp[i+1][10]?dp[i+1][9]:dp[i+1][10];
for(int j=1;j<=9;j++)
{
dp[i][j]=maxf(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1])+dp[i][j];
}
}
}
printf("%d\n",dp[0][5]);
memset(dp, 0, sizeof(dp));
}
return 0;
} 展开
1个回答
展开全部
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int dp[100005][15];
int maxf(int a,int b,int c){
a=a>=b?a:b; a=a>=c?a:c;
return a;
}
int main(){
//freopen("x.in","r",stdin);
int n;
while(scanf("%d",&n)!=EOF&&n!=0) {
int x=0;
int time=0;
int t=-1000;
dp[0][5]=0;
for(int i=1;i<=n;i++){
scanf("%d %d",&x,&time);
dp[time][x]++;
if(time>t) t=time;
}
for(int i=t-1;i>=0;i--){ //对于时间没有需要特判,将你判 5以内的删掉了
dp[i][0]+=(dp[i+1][0]>dp[i+1][1]?dp[i+1][0]:dp[i+1][1]);//猜测你挂的原因还是来自这里
dp[i][10]+=(dp[i+1][9]>dp[i+1][10]?dp[i+1][9]:dp[i+1][10]);//这两个也是+=(感觉你不知道什么是+=因为没看见你用..这个还是蛮方便的 简单介绍一下: a++ ==> a=a+1 ||| a+=2 ==> a=a+2 ||| x+=y ==> x=x+y)
for(int j=1;j<=9;j++)
dp[i][j]+=maxf(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]);
}printf("%d\n",dp[0][5]);
memset(dp, 0, sizeof(dp));
}
return 0;
}
//14445634 2015-08-10 20:13:43 Accepted 1176 78MS 7452K 851 B G++
//注意我还给你添了一个头文件:<cstring> 因为杭电的编译器似乎sizeof 需要这个库
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询