读书人

杭电1864TLE多谢

发布时间: 2013-03-01 18:33:02 作者: rapoo

杭电1864TLE,谢谢!
本帖最后由 leizh007 于 2013-02-27 18:44:53 编辑 杭电题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1864
在九度AC了:http://jobdu.sinaapp.com/problem.php?pid=1025
能帮我看看哪儿有问题吗?谢谢

#include<stdio.h>
double max,q;
double stack[100];//保存满足要求的数额
int top;
int visited[100];
void dfs(int n,double sum)
{
int i,s[100],tops;
tops=0;
for(i=0;i<top;i++)
if(visited[i]==0&&sum+stack[i]<=q)
s[tops++]=i;
for(i=0;i<tops;i++)
{
visited[s[i]]=1;
dfs(s[i],sum+stack[s[i]]);
visited[s[i]]=0;
}
if(sum>max)
max=sum;
}
int main()
{
int n,i,k,flag;
double sum,x;
char s;
scanf("%lf %d",&q,&n);
while(n)
{
top=0;
while(n--)
{
sum=0;
flag=0;
scanf("%d",&k);
while(k--)
{
scanf(" %c:%lf",&s,&x);
if(x<=600&&(s=='A'||s=='B'||s=='C'))
sum+=x;
else
flag=1;
}
if(sum<=1000&&flag==0&&sum<=q)
stack[top++]=sum;
}
for(i=0;i<top;i++)
visited[i]=0;
max=0;
dfs(0,0);
printf("%.2lf\n",max);
scanf("%lf %d",&q,&n);
}
return 0;
}

[解决办法]
1200.00 2
2 B:600.00 B:400.00
1 C:200.50

题目的单项是指单类(见hdu discuss里),所以这个不能输出1000应该输出200.5

读书人网 >软件架构设计

热点推荐