题目链接:http://poj.org/problem?id=1996

思路:

刚开始打了个二维表,调了一个小时,爆内存了。

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int a[];
  5. int y[];
  6. int ans[];
  7. int dp[][];
  8.  
  9. int main()
  10. {
  11. int t;
  12. scanf("%d",&t);
  13. while(t--)
  14. {
  15. memset(a,,sizeof(a));
  16. memset(y,,sizeof(y));
  17. memset(ans,,sizeof(ans));
  18. memset(dp,,sizeof(dp));
  19.  
  20. int m,n;
  21. scanf("%d%d",&m,&n);
  22. for(int i=; i<=m; i++)
  23. {
  24. scanf("%d",&a[i]);
  25. if(i==)
  26. ans[i] = a[i];
  27. }
  28. for(int i=; i<=n; i++)
  29. {
  30. scanf("%d",&y[i]);
  31. dp[][i] = y[i];
  32. }
  33.  
  34. int pos=n;
  35. for(int i=; i<=n; i++)
  36. printf("%d ",dp[][i]);
  37. puts("");
  38. for(int k=; k<=m; k++)
  39. {
  40. for(int i=; i<=n; i++)
  41. {
  42. for(int j=; j<=pos; j++)
  43. {
  44. dp[k][i+j]+=dp[k-][j]*y[i];
  45. //printf("%d ",dp[k][i+j]);
  46. }
  47. }
  48. pos+=n;
  49. //for(int i=0; i<=pos; i++)
  50. //printf("%d ",dp[k][i]);
  51. //puts("");
  52. }
  53.  
  54. pos=n;
  55. for(int i=; i<=m; i++)
  56. {
  57. for(int j=; j<=pos; j++)
  58. {
  59. dp[i][j] = dp[i][j] * a[i];
  60. //printf("%d ",dp[i][j]);
  61. }
  62. //puts("");
  63. pos+=n;
  64. }
  65.  
  66. for(int i=; i<=n*m; i++)
  67. {
  68. for(int j=; j<=m; j++)
  69. ans[i] +=dp[j][i];
  70. }
  71. for(int i=; i<=n*m-; i++)
  72. printf("%d ",ans[i]);
  73. printf("%d",ans[n*m]);
  74. puts("");
  75. }
  76. return ;
  77. }

然后压缩了一下。

  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int a[];
  5. int b[];
  6. int dp[];
  7. int ans[];
  8. int tmp[];
  9.  
  10. int main()
  11. {
  12. int t;
  13. scanf("%d",&t);
  14. while(t--)
  15. {
  16. memset(a,,sizeof(a));
  17. memset(b,,sizeof(b));
  18. memset(dp,,sizeof(dp));
  19. memset(ans,,sizeof(ans));
  20.  
  21. int m,n;
  22. scanf("%d%d",&m,&n);
  23.  
  24. for(int i=;i<=m;i++)
  25. scanf("%d",&a[i]);
  26. ans[] = a[];
  27.  
  28. for(int i=;i<=n;i++)
  29. {
  30. scanf("%d",&b[i]);
  31. dp[i] = b[i];
  32. }
  33. if(m!=)
  34. {
  35. for(int i=;i<=n;i++)
  36. ans[i] +=a[]*dp[i];
  37. }
  38. int pos = n;
  39. for(int k=;k<=m;k++)
  40. {
  41. memset(tmp,,sizeof(tmp));
  42. for(int i=;i<=n;i++)
  43. {
  44. for(int j=;j<=pos;j++)
  45. tmp[i+j] +=b[i]*dp[j];
  46. }
  47.  
  48. pos+=n;
  49.  
  50. for(int i=;i<=pos;i++)
  51. dp[i] = tmp[i];
  52.  
  53. for(int i=;i<=pos;i++)
  54. ans[i]+=a[k]*dp[i];
  55. }
  56. for(int i=;i<=pos-;i++)
  57. printf("%d ",ans[i]);
  58. printf("%d\n",ans[pos]);
  59.  
  60. }
  61. return ;
  62. }

现在还不知道WA在哪里。 打死POJ!!!

后来借鉴了帆哥的代码,一模一样的思路,就AC了。

要是哪个大神看出错了,记得@我啊!

  1. #include<iostream>
  2. using namespace std;
  3. #define INF 10005
  4. int x[INF],y[INF],z[INF],r[INF],p[INF];
  5. int t;
  6. int n,m;
  7. int size;
  8. void calc(int k)
  9. {
  10. int i,j,h;
  11. if(k==)
  12. {
  13. z[k]+=x[k];
  14. size=;
  15. }
  16. else if(k==)
  17. {
  18. for(i=;i<=m;i++)
  19. {
  20. z[i]+=(x[k]*y[i]);
  21. }
  22. size=m;
  23. }
  24. else
  25. {
  26.  
  27. memset(p,,sizeof(p));
  28. for(j=;j<=m;j++)
  29. {
  30. for(h=;h<=size;h++)
  31. {
  32. p[j+h]+=(y[j]*r[h]);
  33. }
  34. }
  35. size+=m;
  36. for(j=;j<=size;j++)
  37. {
  38. r[j]=p[j];
  39. }
  40.  
  41. for(i=;i<=size;i++)
  42. {
  43. z[i]+=(r[i]*x[k]);
  44. }
  45.  
  46. }
  47.  
  48. }
  49. int main()
  50. {
  51. int i,j;
  52. scanf("%d",&t);
  53. while(t--)
  54. {
  55. memset(x,,sizeof(x));
  56. memset(y,,sizeof(y));
  57. memset(z,,sizeof(z));
  58. memset(r,,sizeof(r));
  59. memset(p,,sizeof(p));
  60. scanf("%d%d",&n,&m);
  61. for(i=;i<=n;i++)
  62. {
  63. scanf("%d",&x[i]);
  64. }
  65. for(i=;i<=m;i++)
  66. {
  67. scanf("%d",&y[i]);
  68. r[i]=y[i];
  69. }
  70.  
  71. for(i=;i<=n;i++)
  72. {
  73. calc(i);
  74. }
  75.  
  76. for(i=;i<size;i++)
  77. {
  78. printf("%d ",z[i]);
  79. }
  80. printf("%d",z[size]);
  81. printf("\n");
  82. }
  83.  
  84. }

计算多项式Poj(1996)的更多相关文章

  1. AC日记——计算多项式的导函数 openjudge 1.5 38

    38:计算多项式的导函数 总时间限制:  1000ms 内存限制:  65536kB 描述 计算多项式的导函数是一件非常容易的任务.给定一个函数f(x),我们用f'(x)来表示其导函数.我们用x^n来 ...

  2. C 语言 clock() 函数,例:计算多项式值

    C 语言 clock() 函数,例:计算多项式值 /** * clock(): 捕捉从程序开始运行到 clock() 被调用时所耗费的时间. * 这个时间单位是 clock tick, 即" ...

  3. 用clock()函数计算多项式的运行时间

    百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简 ...

  4. OpenJudge 1.5.36:计算多项式的值

    描述 假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入输入仅一行,包括x和n,用单个空格隔开.x在float范围内,n <= ...

  5. 使用Horner法则计算多项式的值

    计算Pn(x) = an * x^n + an-1 * x^(n-1) + ... + a1 * x + a0 直接计算,需要做的乘法次数 1+2+3+……+n = n(1+n)/2 = O(n2) ...

  6. 多项式的各类计算(多项式的逆/开根/对数/exp/带余除法/多点求值)

    预备知识:FFT/NTT 多项式的逆 给定一个多项式 F(x)F(x)F(x),请求出一个多项式 G(x)G(x)G(x),满足 F(x)∗G(x)≡1(mod xn)F(x)*G(x) \equiv ...

  7. C005:计算多项式的值

    程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float x; do{ printf("E ...

  8. 计算给定多项式在给定点X处的值

    //计算多项式求值 //计算多项式求值#include<iostream>#include<ctime>#include<cmath>using namespace ...

  9. LA 4119 (差分数列 多项式) Always an integer

    题意: 给出一个形如(P)/D的多项式,其中P是n的整系数多项式,D为整数. 问是否对于所有的正整数n,该多项式的值都是整数. 分析: 可以用数学归纳法证明,若P(n)是k次多项式,则P(n+1) - ...

随机推荐

  1. Java对象排序两种方法

    转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...

  2. struts1学习

    转载:https://blog.csdn.net/toyouheart/article/details/4509466

  3. 【ACM】N皇后问题

    N皇后问题 #include <iostream> #include <cmath> using namespace std; ; //判断当前位置的皇后加入是否成立 bool ...

  4. 解决WebStorm/PyCharm/IDEA卡顿的问题

    问题 webstorm强大的功能就不多做介绍了.但是它的缺点也显而易见:吃内存. 电脑配置稍低一点,运行webstorm就特别容易卡顿,特别是项目比较大的时候,那卡顿得不要不要的. 在我的PC机32g ...

  5. Unity3d 破解

    在官网上或者其他地方下载unity3d后 运行注册机,需要详细的设置可以点击edit   一.点击browse,选择安装unity目录下的Editor文件夹 二.选择path,会提示Pathed 三. ...

  6. restful风格下的ajax跨域问题的解决

    Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务器支持哪些请 ...

  7. MQTT学习之一

    一MQTT特性: 基于C/S,发布订阅(发布者服务器->云平台代理->订阅客户端)一对多结构,适用于低带宽高延时,基于TCP/IP之上.

  8. UnityError 以下文件中的行尾不一致,要将行尾标准化吗?

  9. 数据库mysql基础语言--各模式的含义

    1. 欢迎信息 欢迎来到 MySQL 镜像.命令以 ; 或 g 结束.你的 MySQL 连接编号为 2.服务器版本:5.1.47-社区 MySQL 社区服务器(GPL) 版权(C)2000.2010, ...

  10. ApplicationContextAware的作用

    ApplicationContextAware其实我们看到---Aware就知道是干嘛用的了,就是属性注入的, 但是这个ApplicationContextAware的不同地方在于,实现了这个接口的b ...