hdu 1011那位大牛能帮我看看代码 为什么总是wa啊?! 感激不尽啊!
#include<cstring>#include<cmath>#include<cstdlib>#include<iostream>usingnamespacestd;...
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
long n,m;
long a[101],b[101],l[101],r[101],f[101][101];
long work(long,long);
long work(long x,long y)
{
long i,j;
if ((x==0)||(y==0)) return (0);
if ((l[x]==0)&&(r[x]==0))
{
if (20*y<a[x])
return (0);
else
return (b[x]);
}
if (f[x][y]!=0) return (f[x][y]);
if (r[x]!=0)
f[x][y]=work(r[x],y);
for (i=1;i<=y;i++)
{
j=20*i-a[x];
if (j>=0)
f[x][y]=max(f[x][y],b[x]+work(l[x],j/20)+work(r[x],y-i));
}
return (f[x][y]);
}
int main()
{
long i,j,k,p;
while (1)
{
scanf("%d%d",&n,&m);
if ((n==-1)&&(m==-1)) break;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(f,0,sizeof(f));
for (i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for (i=1;i<n;i++)
{
scanf("%d%d",&j,&k);
if (k==1)
{
p=k; k=j; j=p;
}
if (l[j]==0)
l[j]=k;
else
{
p=l[j];
while (r[p]!=0) p=r[p];
r[p]=k;
}
}
p=work(1,m);
printf("%d\n",p);
}
} 展开
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
long n,m;
long a[101],b[101],l[101],r[101],f[101][101];
long work(long,long);
long work(long x,long y)
{
long i,j;
if ((x==0)||(y==0)) return (0);
if ((l[x]==0)&&(r[x]==0))
{
if (20*y<a[x])
return (0);
else
return (b[x]);
}
if (f[x][y]!=0) return (f[x][y]);
if (r[x]!=0)
f[x][y]=work(r[x],y);
for (i=1;i<=y;i++)
{
j=20*i-a[x];
if (j>=0)
f[x][y]=max(f[x][y],b[x]+work(l[x],j/20)+work(r[x],y-i));
}
return (f[x][y]);
}
int main()
{
long i,j,k,p;
while (1)
{
scanf("%d%d",&n,&m);
if ((n==-1)&&(m==-1)) break;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(f,0,sizeof(f));
for (i=1;i<=n;i++)
scanf("%d%d",&a[i],&b[i]);
for (i=1;i<n;i++)
{
scanf("%d%d",&j,&k);
if (k==1)
{
p=k; k=j; j=p;
}
if (l[j]==0)
l[j]=k;
else
{
p=l[j];
while (r[p]!=0) p=r[p];
r[p]=k;
}
}
p=work(1,m);
printf("%d\n",p);
}
} 展开
1个回答
展开全部
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
long n,m;
long a[101],b[101],l[101],r[101],f[101][101];
long work(long,long);
long work(long x,long y)
{
long i,j;
if ((x==0)||(y==0)) return (0);
if ((l[x]==0)&&(r[x]==0))
{
if (20*y<a[x])
return (0);
else
return (b[x]);
}
if (f[x][y]!=0) return (f[x][y]);
if (r[x]!=0)
f[x][y]=work(r[x],y);
for (i=1;i<=y;i++)
{
j=20*i-a[x];
if (j>=0)
f[x][y]=max(f[x][y],b[x]+work(l[x],j/20)+work(r[x],y-i));
}
return (f[x][y]);
}
int main()
{
long i,j,k,p;
while (1)
{
cin>>n>>m;//scanf("%d%d",&n,&m);你没有包括头文件cstdio,那么别用scanf()
if ((n==-1)&&(m==-1)) break;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(f,0,sizeof(f));
for (i=1;i<=n;i++)
cin>>a[i]>>b[i];//scanf("%d%d",&a[i],&b[i]);同上
for (i=1;i<n;i++)
{
cin>>j>>k;//scanf("%d%d",&j,&k);同上
if (k==1)
{
p=k; k=j; j=p;
}
if (l[j]==0)
l[j]=k;
else
{
p=l[j];
while (r[p]!=0) p=r[p];
r[p]=k;
}
}
p=work(1,m);
cout<<p<<endl;//你没有包括头文件cstdio,那么别用printf("%d\n",p);
}
return 0;
}
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;
long n,m;
long a[101],b[101],l[101],r[101],f[101][101];
long work(long,long);
long work(long x,long y)
{
long i,j;
if ((x==0)||(y==0)) return (0);
if ((l[x]==0)&&(r[x]==0))
{
if (20*y<a[x])
return (0);
else
return (b[x]);
}
if (f[x][y]!=0) return (f[x][y]);
if (r[x]!=0)
f[x][y]=work(r[x],y);
for (i=1;i<=y;i++)
{
j=20*i-a[x];
if (j>=0)
f[x][y]=max(f[x][y],b[x]+work(l[x],j/20)+work(r[x],y-i));
}
return (f[x][y]);
}
int main()
{
long i,j,k,p;
while (1)
{
cin>>n>>m;//scanf("%d%d",&n,&m);你没有包括头文件cstdio,那么别用scanf()
if ((n==-1)&&(m==-1)) break;
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
memset(f,0,sizeof(f));
for (i=1;i<=n;i++)
cin>>a[i]>>b[i];//scanf("%d%d",&a[i],&b[i]);同上
for (i=1;i<n;i++)
{
cin>>j>>k;//scanf("%d%d",&j,&k);同上
if (k==1)
{
p=k; k=j; j=p;
}
if (l[j]==0)
l[j]=k;
else
{
p=l[j];
while (r[p]!=0) p=r[p];
r[p]=k;
}
}
p=work(1,m);
cout<<p<<endl;//你没有包括头文件cstdio,那么别用printf("%d\n",p);
}
return 0;
}
更多追问追答
追问
恩。! 已经改过来的。!
不过还是wa啊。! 我觉得可能是程序本身有问题。! 能帮我看看么?!
追答
我看不懂你要实现什么功能...但是....你写了一个while(1)的死循环我就觉得不合适....一般程序不会这么写的....而且也没有终止的跳出语句....
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询