计算多项式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) - ...
随机推荐
- spring bean name生成规则
现象: PVService PVServiceImpl ===>名称就是PVServiceImpl, 首字母没有小写 PageViewServiceImpl ==>名称是pageViewS ...
- jconsole如何查看
https://www.jdon.com/idea/jvm-gc.html 场景: https://www.cnblogs.com/yszzu/p/9648579.html 查看大对象到底占用多 ...
- Java学习笔记day04_数组
1.switch case switch语句中表达式的数据类型是有要求的: JDK 1.0 ~ 1.4 , 数据类型接受byte, short, int, char JDK 1.5 , 数据类型接受b ...
- 搭建hadpoot平台(集群式分布)
1.先下载VMware1.2,然后安装. 2.下载ubuntu-1.4.05-desktop-amd64.iso.下载地址:http://mirrors.aliyun.com/ubuntu-relea ...
- 使用springmvc时处理404的方法
使用springmvc时处理404的方法 来源: https://www.cnblogs.com/handsome-man/p/5519439.html,再次申明不是我原创的,尊重原创 如何定义404 ...
- Selenium2(WebDriver)中执行JavaScript代码 (转)
在用selenium编写web页面的自动化测试代码时,可能需要执行一些JavaScript代码,selenium本身就支持执行js,我们在代码中可以使用executeScript.executeAsy ...
- 以多进程读取oss符合条件的数据为例,综合使用多进程间的通信、获取多进程的数据
import datetime import sys import oss2 from itertools import islice import pandas as pd import re im ...
- 【3dsMax安装失败,如何卸载、安装3dMax 2017?】
是不是遇到MAYA/CAD/3DSMAX/INVENTOR安装失败?AUTODESK系列软件着实令人头疼,MAYA/CAD/3DSMAX/INVENTOR安装失败之后不能完全卸载!!!(比如maya, ...
- CAD安装失败怎样卸载CAD 2014?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- cout和printf不能混用
1.两者的缓存机制不同:printf无缓冲区,而std::cout有 (其实printf也是有缓冲区的,https://blog.csdn.net/ithzhang/article/details/6 ...