计算多项式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) - ...
随机推荐
- logback+spring实践
配置文件名称使用: logback-spring.xml 配置user.home是jvm传过来的系统参数,可以直接使用 <property name="LOG_PATH&quo ...
- Python-Anaconda练习candy算子用于边缘提取,再用hough变换检测直线边缘
img: 待检测的图像. threshold: 阈值,可先项,默认为10 line_length: 检测的最短线条长度,默认为50 line_gap: 线条间的最大间隙.增大这个值可以合并破碎的线条. ...
- 在MD中使用Emoji
mark语法中支持emoji表情 具体语法是:emoji: 比如我输入 :smile: 就会出现微笑
- 转 Alert.log shows No Standby Redo Logfiles Of Size 153600 Blocks Available
http://blog.itpub.net/23135684/viewspace-703620/ Alert.log shows No Standby Redo Logfiles Of Size 15 ...
- Python函数调用
1.同级目录下的调用 - src |- mod1.py |- test1.py 若在程序test1.py中导入模块mod1.py,则直接使用 import mod1 或 from mod1 impor ...
- 获取项目路径js
var curWwwPath=window.document.location.href; //获取主机地址之后的目录,如: myproj/view/my.jsp ...
- Map集合练习之对字符串中字母出现的次数求和
不多说,直接上干货! 代码需求 如有这么一个字符串 String str = "fdg+avAdc bs5dDa9c-dfs"; MapTest.java package zhou ...
- 为什么地址栏的快捷键是Alt D
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:为什么地址栏的快捷键是Alt D.
- output引用类型
1.创建存储过程,将参数avg设置为引用参数,可以对参数有反馈作用 ), @avg float output) as select @avg=AVG(price) from goods where g ...
- Chrome拷贝插件的对比 zeroclipboard和clipboard插件
1.zeroclipboard插件 实现原理:Zero Clipboard 利用 Flash 进行复制,用了一个透明的 Flash ,让其漂浮在按钮之上,这样其实点击的不是按钮而是 Flash ,也就 ...