当前位置: 首页 > news >正文

bzoj 2655 calc——拉格朗日插值

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2655

先考虑DP。dp[ i ][ j ]表示值域为 i 、选 j 个值的答案,则 dp[ i ][ j ] = dp[ i-1 ][ j ] + dp[ i-1 ][ j-1] * i * j 。两项分别表示一定不选/一定选第 i 个值。

因为答案是值域大、个数小,所以考虑只看 dp[ ][ n ] ,即把值域看成自变量。

不知怎么知道这个式子的次数是 2*n 。尝试用做几遍差分看什么时候数列都为0的方法来看,但得出应该是 2*n - 2 次才对呀……

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=4,K=12,M=505;
ll dp[M][M],c[M];
int pw(int x,int k)
{
  int ret=1;while(k){if(k&1)ret*=x;x*=x;k>>=1;}return ret;
}
int main()
{
  dp[0][0]=1;
  for(int i=1;i<=K;i++)
    for(int j=1;j<=N;j++)
      dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*i*j;
  for(int i=N;i<=K;i++)c[i]=dp[i][N];
  int cnt=0,nw=N;
  while(c[K])
    {
      for(int i=K;i>=nw;i--)
    c[i]-=c[i-1]; c[nw-1]=0;
      for(int i=1;i<=K;i++)
    printf("%6lld ",c[i]); puts("");
      nw++; cnt++;
    }
  printf("cnt=%d\n",cnt);
  return 0;
}
打表观察

以为值域<个数的dp无意义,于是选择 n~3*n 这 2*n+1 个值。但其实值域<个数的也能用。

注意 x[ i ] - x[ j ] 有负数,最后(答案+mod)%mod。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=505;
int n,A,mod,dp[N*3][N],ans;
int pw(int x,int k)
{
  int ret=1;while(k){if(k&1)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=1;}return ret;
}
int main()
{
  scanf("%d%d%d",&A,&n,&mod);
  int lm=n*3;
  for(int i=0;i<=lm;i++)dp[i][0]=1;///
  for(int i=1;i<=lm;i++)
    for(int j=1;j<=i&&j<=n;j++)
      dp[i][j]=(dp[i-1][j]+(ll)dp[i-1][j-1]*i%mod*j)%mod;
  if(A<=lm)
    {
      printf("%d\n",dp[A][n]);return 0;
    }
  int s0,s1;
  for(int i=n;i<=lm;i++)
    {
      s0=1; s1=1;//
      for(int j=n;j<=lm;j++)
    {
      if(j==i)continue;
      s0=(ll)s0*(A-j)%mod;  s1=(ll)s1*(i-j)%mod;
    }
      ans=(ans+(ll)s0*pw(s1,mod-2)%mod*dp[i][n]%mod)%mod;
    }
  printf("%d\n",(ans+mod)%mod);
  return 0;
}

 

转载于:https://www.cnblogs.com/Narh/p/10009669.html

相关文章:

  • 关于mysql数据库的乱码问题
  • n阶行列式算法(c程序)
  • 2-2+CPU多级缓存-乱序执行优化
  • 正则表达式中/i,/g,/ig,/gi,/m的区别和含义
  • bzoj 2194 快速傅立叶之二 —— FFT
  • ELK使用2-Kibana使用
  • 用Inno setup制作以管理员权限启动的安装包
  • airtest自动化游戏脚本测试
  • 【WebApi】通过HttpClient调用Web Api接口
  • JUnit测试
  • error while loading shared libraries: xxx.so.x 错误的原因和解决办法
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • jmeter查看结果树中响应数据Unicode转换成中文
  • 牛客网——反序输出
  • python-24: re 模块 之三 re.compile
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • Intervention/image 图片处理扩展包的安装和使用
  • java 多线程基础, 我觉得还是有必要看看的
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • php ci框架整合银盛支付
  • Quartz初级教程
  • rabbitmq延迟消息示例
  • VuePress 静态网站生成
  • Vue组件定义
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 基于webpack 的 vue 多页架构
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 如何优雅地使用 Sublime Text
  • 使用 Docker 部署 Spring Boot项目
  • 微信小程序开发问题汇总
  • 我们雇佣了一只大猴子...
  • ​渐进式Web应用PWA的未来
  • #1014 : Trie树
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • $$$$GB2312-80区位编码表$$$$
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (Matlab)使用竞争神经网络实现数据聚类
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (算法二)滑动窗口
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • ./configure,make,make install的作用(转)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net Web窗口页属性
  • .net 生成二级域名
  • .NET 使用 XPath 来读写 XML 文件
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NET 中什么样的类是可使用 await 异步等待的?