计算多项式Poj(1996)
题目链接:http://poj.org/problem?id=1996
思路:
刚开始打了个二维表,调了一个小时,爆内存了。
- #include <stdio.h>
- #include <string.h>
- int a[];
- int y[];
- int ans[];
- int dp[][];
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- memset(a,,sizeof(a));
- memset(y,,sizeof(y));
- memset(ans,,sizeof(ans));
- memset(dp,,sizeof(dp));
- int m,n;
- scanf("%d%d",&m,&n);
- for(int i=; i<=m; i++)
- {
- scanf("%d",&a[i]);
- if(i==)
- ans[i] = a[i];
- }
- for(int i=; i<=n; i++)
- {
- scanf("%d",&y[i]);
- dp[][i] = y[i];
- }
- int pos=n;
- for(int i=; i<=n; i++)
- printf("%d ",dp[][i]);
- puts("");
- for(int k=; k<=m; k++)
- {
- for(int i=; i<=n; i++)
- {
- for(int j=; j<=pos; j++)
- {
- dp[k][i+j]+=dp[k-][j]*y[i];
- //printf("%d ",dp[k][i+j]);
- }
- }
- pos+=n;
- //for(int i=0; i<=pos; i++)
- //printf("%d ",dp[k][i]);
- //puts("");
- }
- pos=n;
- for(int i=; i<=m; i++)
- {
- for(int j=; j<=pos; j++)
- {
- dp[i][j] = dp[i][j] * a[i];
- //printf("%d ",dp[i][j]);
- }
- //puts("");
- pos+=n;
- }
- for(int i=; i<=n*m; i++)
- {
- for(int j=; j<=m; j++)
- ans[i] +=dp[j][i];
- }
- for(int i=; i<=n*m-; i++)
- printf("%d ",ans[i]);
- printf("%d",ans[n*m]);
- puts("");
- }
- return ;
- }
然后压缩了一下。
- #include <stdio.h>
- #include <string.h>
- int a[];
- int b[];
- int dp[];
- int ans[];
- int tmp[];
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--)
- {
- memset(a,,sizeof(a));
- memset(b,,sizeof(b));
- memset(dp,,sizeof(dp));
- memset(ans,,sizeof(ans));
- int m,n;
- scanf("%d%d",&m,&n);
- for(int i=;i<=m;i++)
- scanf("%d",&a[i]);
- ans[] = a[];
- for(int i=;i<=n;i++)
- {
- scanf("%d",&b[i]);
- dp[i] = b[i];
- }
- if(m!=)
- {
- for(int i=;i<=n;i++)
- ans[i] +=a[]*dp[i];
- }
- int pos = n;
- for(int k=;k<=m;k++)
- {
- memset(tmp,,sizeof(tmp));
- for(int i=;i<=n;i++)
- {
- for(int j=;j<=pos;j++)
- tmp[i+j] +=b[i]*dp[j];
- }
- pos+=n;
- for(int i=;i<=pos;i++)
- dp[i] = tmp[i];
- for(int i=;i<=pos;i++)
- ans[i]+=a[k]*dp[i];
- }
- for(int i=;i<=pos-;i++)
- printf("%d ",ans[i]);
- printf("%d\n",ans[pos]);
- }
- return ;
- }
现在还不知道WA在哪里。 打死POJ!!!
后来借鉴了帆哥的代码,一模一样的思路,就AC了。
要是哪个大神看出错了,记得@我啊!
- #include<iostream>
- using namespace std;
- #define INF 10005
- int x[INF],y[INF],z[INF],r[INF],p[INF];
- int t;
- int n,m;
- int size;
- void calc(int k)
- {
- int i,j,h;
- if(k==)
- {
- z[k]+=x[k];
- size=;
- }
- else if(k==)
- {
- for(i=;i<=m;i++)
- {
- z[i]+=(x[k]*y[i]);
- }
- size=m;
- }
- else
- {
- memset(p,,sizeof(p));
- for(j=;j<=m;j++)
- {
- for(h=;h<=size;h++)
- {
- p[j+h]+=(y[j]*r[h]);
- }
- }
- size+=m;
- for(j=;j<=size;j++)
- {
- r[j]=p[j];
- }
- for(i=;i<=size;i++)
- {
- z[i]+=(r[i]*x[k]);
- }
- }
- }
- int main()
- {
- int i,j;
- scanf("%d",&t);
- while(t--)
- {
- memset(x,,sizeof(x));
- memset(y,,sizeof(y));
- memset(z,,sizeof(z));
- memset(r,,sizeof(r));
- memset(p,,sizeof(p));
- scanf("%d%d",&n,&m);
- for(i=;i<=n;i++)
- {
- scanf("%d",&x[i]);
- }
- for(i=;i<=m;i++)
- {
- scanf("%d",&y[i]);
- r[i]=y[i];
- }
- for(i=;i<=n;i++)
- {
- calc(i);
- }
- for(i=;i<size;i++)
- {
- printf("%d ",z[i]);
- }
- printf("%d",z[size]);
- printf("\n");
- }
- }
计算多项式Poj(1996)的更多相关文章
- AC日记——计算多项式的导函数 openjudge 1.5 38
38:计算多项式的导函数 总时间限制: 1000ms 内存限制: 65536kB 描述 计算多项式的导函数是一件非常容易的任务.给定一个函数f(x),我们用f'(x)来表示其导函数.我们用x^n来 ...
- C 语言 clock() 函数,例:计算多项式值
C 语言 clock() 函数,例:计算多项式值 /** * clock(): 捕捉从程序开始运行到 clock() 被调用时所耗费的时间. * 这个时间单位是 clock tick, 即" ...
- 用clock()函数计算多项式的运行时间
百度百科中定义clock():clock()是C/C++中的计时函数,而与其相关的数据类型是clock_t.在MSDN中,查得对clock函数定义如下: clock_t clock(void) ; 简 ...
- OpenJudge 1.5.36:计算多项式的值
描述 假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值. 输入输入仅一行,包括x和n,用单个空格隔开.x在float范围内,n <= ...
- 使用Horner法则计算多项式的值
计算Pn(x) = an * x^n + an-1 * x^(n-1) + ... + a1 * x + a0 直接计算,需要做的乘法次数 1+2+3+……+n = n(1+n)/2 = O(n2) ...
- 多项式的各类计算(多项式的逆/开根/对数/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 ...
- C005:计算多项式的值
程序: #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { float x; do{ printf("E ...
- 计算给定多项式在给定点X处的值
//计算多项式求值 //计算多项式求值#include<iostream>#include<ctime>#include<cmath>using namespace ...
- LA 4119 (差分数列 多项式) Always an integer
题意: 给出一个形如(P)/D的多项式,其中P是n的整系数多项式,D为整数. 问是否对于所有的正整数n,该多项式的值都是整数. 分析: 可以用数学归纳法证明,若P(n)是k次多项式,则P(n+1) - ...
随机推荐
- Java对象排序两种方法
转载:https://blog.csdn.net/wangtaocsdn/article/details/71500500 有时候需要对对象列表或数组进行排序,下面提供两种简单方式: 方法一:将要排序 ...
- struts1学习
转载:https://blog.csdn.net/toyouheart/article/details/4509466
- 【ACM】N皇后问题
N皇后问题 #include <iostream> #include <cmath> using namespace std; ; //判断当前位置的皇后加入是否成立 bool ...
- 解决WebStorm/PyCharm/IDEA卡顿的问题
问题 webstorm强大的功能就不多做介绍了.但是它的缺点也显而易见:吃内存. 电脑配置稍低一点,运行webstorm就特别容易卡顿,特别是项目比较大的时候,那卡顿得不要不要的. 在我的PC机32g ...
- Unity3d 破解
在官网上或者其他地方下载unity3d后 运行注册机,需要详细的设置可以点击edit 一.点击browse,选择安装unity目录下的Editor文件夹 二.选择path,会提示Pathed 三. ...
- restful风格下的ajax跨域问题的解决
Ajax跨域请求时,如果设置Header的ContentType为application/json,会分两次发送请求一次先发送Method为OPTIONS的请求到服务器,这个请求会询问服务器支持哪些请 ...
- MQTT学习之一
一MQTT特性: 基于C/S,发布订阅(发布者服务器->云平台代理->订阅客户端)一对多结构,适用于低带宽高延时,基于TCP/IP之上.
- UnityError 以下文件中的行尾不一致,要将行尾标准化吗?
- 数据库mysql基础语言--各模式的含义
1. 欢迎信息 欢迎来到 MySQL 镜像.命令以 ; 或 g 结束.你的 MySQL 连接编号为 2.服务器版本:5.1.47-社区 MySQL 社区服务器(GPL) 版权(C)2000.2010, ...
- ApplicationContextAware的作用
ApplicationContextAware其实我们看到---Aware就知道是干嘛用的了,就是属性注入的, 但是这个ApplicationContextAware的不同地方在于,实现了这个接口的b ...