工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 1135|回复: 3

1666应该如何优化,我狂超时!

[复制链接]
发表于 2005-8-8 22:09 | 显示全部楼层 |阅读模式
http://acm.zju.edu.cn/show_problem.php?pid=1666
这个题我用递归,不过不知道如何优化,所以猜超时,哪位有空的研究一下,然后告知.
 楼主| 发表于 2005-8-8 22:10 | 显示全部楼层
#include<stdio.h>
int flag[301];
void search(int num,int from)
{
        int i;
        if(num>=300)return;
        flag[num]++;
        for(i=from;i<18;i++)
                search(num+i*i,i);
        return;
}
main()
{
        int i,n;
        for(i=1;i<300;i++)
                flag=0;
        for(i=1;i<18;i++)
        {
                search(i*i,i);
        }
        while(1)
        {
                scanf("%d",&n);
                printf("%d\n",flag[n]);
        }
}
回复

使用道具 举报

发表于 2005-8-14 18:27 | 显示全部楼层
好像很容易抵推,记录中间的值
动态规划用于非最优化问题
回复

使用道具 举报

发表于 2005-10-27 02:17 | 显示全部楼层
Originally posted by 晓东 at 2005-8-8 22:10:
#include<stdio.h>
int flag[301];
void search(int num,int from)
{
        int i;
        if(num>=300)return;
        flag[num]++;
        for(i=from;i<18;i++)
                search(num+i*i,i);
        return;
}
main()
{
         ...



for(i=1;i<300;i++)
                flag=0;

这个我一般用memset的,全部设置为0,简单。嘿嘿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-6-6 02:36

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表