计算多项式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) - ...
随机推荐
- 搭建一个wordpress网站需要做哪些工作
今天做了自己的个人网站:二飞日志 之前因为服务器的问题,因为备案的原因辛辛苦苦做的站点数据没了.还好的是没有多少数据.没关系,重新来.有了上一次的经验,这次搭建起来比较顺手.但是也出现了几个问题.下面 ...
- GM TECH2 Scanner Clone
Professional Diagnostic Tools gm tech 2 scanner china with multi-languages, TIS2000 Programming CD, ...
- php程序设计 1,2章节
<?php/** * Created by PhpStorm. * User: DY040 * Date: 2017/9/4 * Time: 10:39 * * * 1: php起源于1995 ...
- 1.Exadata技术演进
V1-v2 和 HP Exadata 2-2 和 SUN 2011 3-2 4-2 5-2 2014底 2-2 混合运算 2-8 是大数据运算 问题1. 随着系统规模增加,传统数据库架 ...
- Xshell设置主机名高亮
修改后的效果: 操作步骤: 情况①:如果是Ubuntu或者Debian,按照下面的流程,两步解决: 打开~/.bashrc. 修改参数force_color_prompt=yes去掉前面的注释#. 情 ...
- python set_index与reset_index的妙用
- python 之serial
一 先按照 pywin32:pywin32是一个非常强大的Python扩展库,是Python调用Windows系统底层功能的最佳接口,不安装这个按照pyserial也没有用 二 按装pyserial ...
- Apache Beam的特点
不多说,直接上干货! Apache Beam 有两大特点: 1.统一了数据批处理(batch)和流处理(stream)编程范式: 2.能在任何执行引擎上运行. 它不仅为模型设计.更为执行一系列数据导向 ...
- 牛客网Java刷题知识点之内存的划分(寄存器、本地方法区、方法区、栈内存和堆内存)
不多说,直接上干货! 其中 1)程序计数器:用于指示当前线程所执行的字节码执行到了第几行,可以理解为当前线程的行号指示器.每个计数器志勇赖记录一个线程的行号,所以它是线程私有的. ...
- pat1025. PAT Ranking (25)
1025. PAT Ranking (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Programmi ...