计算多项式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) - ...
随机推荐
- python进制转换或数据格式转换
以下是部分进制转换的,都是python内置函数 int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 f ...
- ubuntu简单的小命令
1. gnome-system-monitor,用作調处系统管理窗口,方便结束相关程序. 2. sudo python setup.py install,用作对.py文件的安装,但注意要先cd /ho ...
- 如何 将下载离线 nupkg 文件 安装到VS2017
https://www.cnblogs.com/cncc/articles/8276878.html --------------------------------------------- ...
- 性能测试工具LoadRunner01-性能测试基础
什么是性能测试? 在一定的约束条件下(指定的软件.硬件.网络环境等)对产品按一定的性能指标进行测试,确定系统能承受的最大负载压力,解决性能瓶颈.给用户最好的体验. 性能测试流程? 什么时候开始性能测试 ...
- instancemethod, staticmethod, classmethod & abstractmethod
实例方法.静态方法.类方法.抽象方法 1. Python中方法的工作方式(How methods work in Python) A method is a function that is sto ...
- Day3监督学习——决策树原理
Day3 机器学习监督学习——决策树原理 一.决策树的原理 1.机器学习中分类和预测算法的评估: 准确率 速度 强壮型:有数据缺失或错误时算法的运行 可规模性:数量级规模比较大 可解释性 2.决策树( ...
- mac os 和 ubuntu 上测试工具check-0.9.10的安装
由于工作需要,要使用check 这个单元测试工具. 首先,说一说在Mac10.9上面的安装.我是直接在官网(http://check.sourceforge.net)上下载源码包. 1,解压 2,进入 ...
- C# 本地文件的上传和下载
本文主要介绍一下,在APS.NET中文件的简单上传于下载,上传是将文件上传到服务器的指定目录下,下载是从存入数据库中的路径,从服务器上下载. 1.上传文件 (1)页面代码 <table alig ...
- linux程序分析工具介绍(二)—-ldd,nm
本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具.ldd是用来分析程序运行时需要依赖的动态库的工具:nm是用来查看指定程序中的符号表相关内容的工具.下面通过例子,分别来介绍一下这两 ...
- 初步学习XML的基本代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...