NOIP模拟测试6「那一天我们许下约定(背包dp)·那一天她离我而去」

那一天我们许下约定

内部题,题干不粘了。

$30分算法$


 首先看数据范围,可以写出来一个普通dp

#include<bits/stdc++.h>
#define ll int
#define A 2100
#define mod 998244353
using namespace std;
ll f[1501][A+A+A],n,d,m;
int main()
{scanf("%d%d%d",&n,&d,&m);while(n!=0&&d!=0&&m!=0){memset(f,0,sizeof(f));f[0][0]=1;for(ll i=1;i<=d;i++)f[0][i]=1;for(ll i=1;i<=n;i++)for(ll k=1;k<=d;k++){for(ll j=min(m-1,i);j>=0;j--)if(i-j>=0)    f[i][k]=(f[i][k]+f[i-j][k-1])%mod;}printf("%d\n",f[n][d]);scanf("%d%d%d",&n,&d,&m);}
}
View Code

d最大为$1e^12$所以你这个dp会完美T掉或者M掉

$100分算法$


 观察,发现n的范围非常小,m的范围也特别小。

所以我们利用这条性质,先片面的忽视掉这一天不给她饼干的情况,我们设定$f$定义为每天都给她饼干的情况。

设$f[i][j]$中i表示为前$i$天目前给了$j$个饼干的情况

然后可以推出来方程式

可以给她1~m-1个饼干

$f[i][j]=\sum_\limits {k=(j-M-1)}^{k<=j-1} f[i-1][k]$

然后直接转移,复杂度仍然难以接受,观察dp式子发现它是由一个字段转移过来的,我们要用前缀和维护优化一下。

仍然AC不了?

可能你会乘爆long long

注意多取模

#include<bits/stdc++.h>
#define ll long long
#define  A 2010
#define mod 998244353
using namespace std;
ll f[A][A],n,m,q,d;
ll sum[A];
ll meng(ll x,ll k)
{ll ans=1;for(;k;k>>=1,x=x*x%mod)if(k&1)ans=x*ans%mod;return ans%mod;
}
int main(){while(1){scanf("%lld%lld%lld",&n,&d,&m);ll ans=0;if(n==0&&d==0&&m==0){return 0;}memset(f[1],0,sizeof(f[1]));f[0][0]=1;for(ll i=1;i<=min(n,m-1);i++)f[1][i]=1;for(ll i=2;i<=n;i++){for(ll j=0;j<=n;j++)sum[j]=(sum[j-1]%mod+f[i-1][j]%mod)%mod;for(ll j=1;j<=n;j++)f[i][j]=(sum[j-1]%mod-sum[max(j-m,0ll)]%mod+mod)%mod;}ll sd=d%mod;for(ll i=1;i<=min(n,d);i++){if(i==1)ans=(ans+sd*f[i][n]%mod)%mod,ans%=mod;else{sd=(sd%mod*meng(i,mod-2)%mod*((d-i+1)%mod))%mod;ans%=mod;ans=(ans+f[i][n]%mod*sd%mod)%mod;}
//                if(sd!=0)printf("sd=%lld ans=%lld f*s=%lld\n",sd,ans,f[i][n]*sd%mod);
        } cout<<(ans+mod)%mod<<endl;}
}
View Code

 

 那一天她离我而去

听说暴力可以AC所以我打的A*???

看不懂题解,如果给一个菊花图题解不就爆炸了吗?$2^{10000}$我觉得会炸

所以这个题瞎搞就行了???

然后我就瞎搞了个A*

跑的还特别快。大约600毫。

思路大约就是把每个直接与1相连的点拿出来,然后对于每个点跑A*,因为已经提前处理出来各种dis所以比较快。

然后没了

#include<bits/stdc++.h>
using namespace std;
#define ll int
#define A 100010
#define in inline 
ll n,m;
bool flag[A],ok=0;
ll head[A],nxt[A],ver[A],tot1=0,t;
ll head2[A],nxt2[A],ver2[A],cnt=0,tot2=0;
ll value[A],value2[A],e,d[A],len=0;
struct qnode{ll v,w,sz,id;friend bool operator < (qnode x,qnode y){return x.w+d[x.v]>y.w+d[y.v];}
};
void re()
{tot1=1,tot2=1;memset(flag,0,sizeof(flag));memset(head,0,sizeof(head));memset(head2,0,sizeof(head2));memset(ver,0,sizeof(ver));memset(ver2,0,sizeof(ver2));memset(nxt,0,sizeof(nxt));memset(nxt2,0,sizeof(nxt2));memset(value,0,sizeof(value));memset(value2,0,sizeof(value2));
}
in void add1(ll u,ll v,ll w)
{ver[++tot1]=v;nxt[tot1]=head[u];value[tot1]=w;head[u]=tot1;
}
in void add2(ll x,ll y,ll w)
{ver2[++tot2]=y;nxt2[tot2]=head2[x];value2[tot2]=w;head2[x]=tot2;
}
in void spfa(ll root)
{memset(flag,0,sizeof(flag));memset(d,0x3f,sizeof(d));queue <ll>q;q.push(root);flag[root]=1;d[root]=0;while(!q.empty()){ll x=q.front();q.pop();flag[x]=0;for(ll i=head[x];i;i=nxt[i]){ll y=ver[i],w=value[i];if(d[y]>d[x]+w){d[y]=d[x]+w;if(!flag[y]){flag[y]=1;q.push(y);}}}}return ;
}
in ll read()
{ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
in ll astar()
{
//    从每个直接相连的点开始跑A*ll ans=0x7ffffff;for(ll i=head[1];i;i=nxt[i]){ll y=ver[i];priority_queue<qnode> h;memset(flag,0,sizeof(flag));    qnode s;s.v=y,s.w=value[i],s.id=0;h.push(s);bool ok=0;while(!h.empty()){qnode no=h.top();
//            printf("当前 %d sumvalue=%d\n",no.v,no.w);if(no.v==1){ans=min(no.w,ans);break;}h.pop();flag[no.v]=1;for(ll i=head2[no.v];i;i=nxt2[i]){ll tu=ver2[i];
//                printf("tu=%d\n",tu);if(tu==1&&!ok){ok=1;
//                    printf("tu=%d \n",tu);continue;}if(flag[tu]){/*printf("掠过\n");*/continue;}
//                printf("没有掠过\n");
                qnode t;t.v=tu;t.w=value[i]+no.w;t.sz=no.sz+1;h.push(t);
//                printf("推入 %d->%d z=%d\n",no.v,tu,value2[i]+no.w);
            }}}return ans;
}int main()
{scanf("%d",&t);while(t--){re();ll xx,yy;ll zz;n=read(),m=read();for(ll i=1;i<=m;i++){xx=read(),yy=read();zz=read();add1(yy,xx,zz);add1(xx,yy,zz);add2(xx,yy,zz);add2(yy,xx,zz);}spfa(1);
/*        for(ll i=2;i<=tot1;i++){printf("%d\n",ver[i]);}for(ll i=1;i<=n;i++){printf("%d\n",d[i]);}
*/        ok=1;ll ans=astar();if(ans>=1000000) cout<<-1<<endl;elseprintf("%d\n",ans);}
}
View Code

 

转载于:https://www.cnblogs.com/znsbc-13/p/11218768.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/349951.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用TestContainers提高测试性能

在我以前的测试文章中&#xff0c;我描述了如何使用TestContainers为数据库测试提供现实的测试环境。 此评论显示了缺点&#xff1a; …如上所述&#xff0c;似乎总是有一些缺点。 在这种情况下&#xff0c;启动Docker映像及其包含的所有内容的开销将增加您的总体构建时间。 提…

mysql 横向排列,mysql横向转纵向、纵向转横向排列的方法

初始化数据DROP TABLE IF EXISTS test_01;CREATE TABLE test_01 (id int(0) NOT NULL,user varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT 用户,km varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT …

VS2010常用快捷键自定义

VS的快捷键确实很多&#xff0c;不过对我来说实用的几个&#xff0c;要用的时候实在是按得别扭。所以重新设置了某些快捷键。 设置方法如下&#xff1a; 1.进入工具-选项 对话框 2.选择【环境】-【键盘】 3.在 【显示命令包含】 下面的对话框中输入你想重新定义快捷键的中文名&…

matlab光学毕业论文,光学信息处理实验的Matlab仿真.doc

摘要&#xff1a;光学实验系统往往比较精密和复杂&#xff0c;理论课堂教学中加入相关实验的演示往往比较费时&#xff0c;而且也不一定能得到正确的实验结果。随着计算机技术的发展&#xff0c;强大的运算性能和图形处理能力可以很好的解决这个问题&#xff0c;满足课堂教学中…

JavaScript方法——call和apply

1、相同点: a&#xff09; 产生的效果或作用完全相同&#xff1b; b&#xff09; 至少有一个参数&#xff1b; c&#xff09; 第一个参数必须有且是一个对象&#xff08;Object&#xff09;&#xff0c;因为就是这个家伙偷懒。 2、不同点: 传递参数的方式。 前提: 1、有两个对象…

阿帕奇跨域_阿帕奇骆驼备忘单

阿帕奇跨域轮询一个空目录&#xff08;并发送一个空消息&#xff0c;正文为空&#xff09;&#xff1a; from(file://temp?sendEmptyMessageWhenIdletrue)停止路线&#xff1a; .process(new Processor() {public void process(Exchange exchange) throws Exception {getConte…

天空之城 matlab,[转载]matlab演奏《天空之城》代码

%matlab演奏《天空之城》代码l_dao262; %将“l_dao”宏定义为低音“1”的频率262Hzl_re286; %将“l_re”宏定义为低音“2”的频率286Hzl_mi311; %将“l_mi”宏定义为低音“3”的频率311Hzl_fa349; %将“l_fa”宏定义为低音“4”的频率349Hzl_sao392; %将“l_sao”宏定义为低音“…

7.0上的新KIE持久性API

这篇文章介绍了即将到来的Drools和jBPM持久性api。 创建持久性api&#xff08;不绑定到JPA&#xff09;的动机是因为Drools和jBPM中的持久性直到7.0.0发行版才允许将替代性持久性机制与JPA完全集成。 尽管JPA是一个出色的api&#xff0c;但它与传统RDBMS模型紧密地结合在一起&a…

从客户的角度看网站涉及的第一要素

最近给某企业做了一个内部网站&#xff0c;界面风格、内容都是按照客户的要求进行了开发&#xff0c;测试阶段客户比较满意。投入试运行后&#xff0c;客户的领导级人物看了一眼首页中图片的大小&#xff08;600K&#xff09;&#xff0c;马上对我们的软件开发水平进行贬低。因…

linux ssl PHP,Linux环境安装Apache与PHP,支持SSL

1、Apache在如下页面下载apache的for Linux 的源码包http://www.apache.org/dist/httpd/;存至/home/xx目录&#xff0c;xx是自建文件夹&#xff0c;我建了一个wj的文件夹。命令列表&#xff1a;cd /home/wjtar -zxvf httpd-2.0.54.tar.gzmv httpd-2.0.54 apachecd apache./conf…

JBUILDER 2006怎么配置 STRUTS?[

建web工程时引入struts框架&#xff0c;选版本就可以了。jbuilder2006中有一个struts的可视化操作界面天极网有详细的图文资料,搜以下就可以找到关注首先新建项目然后选择Web选项,双击Web Module(WAR)创建一个Module&#xff0c;我感觉这个Web Module就相当于虚拟目录。然后可以…

dos命令查看oracle_home,Oracle - OraDb10g_home1配置方法+DOS命令

实验一(时间&#xff1a;2012.3.6)1实验项目名称&#xff1a;ORACLE 10G的安装、运行与配置2实验内容&#xff1a;a.检查ORACLE 10G安装的软硬件环境&#xff0c;安装服务器端软件和客户端软件&#xff1b;b.查看安装后的结果&#xff1b;c.启动与关闭监听服务、实例服务等&…

jhsdb:JDK 9的新工具

我喜欢在分析性能和其他基于Java的应用程序的其他问题的早期步骤中使用JDK随附的命令行工具&#xff0c;并在诸如jcmd &#xff0c; jps &#xff0c; jstat &#xff0c; jinfo &#xff0c; jhat和jmap &#xff0c; jrunscript &#xff0c; jstack之类的 工具上进行 博客撰…

purfer序列

prufer序列求法 对于一个无根无向图我们可以应用prufer序列操作使它缩成一个序列。 具体操作 一&#xff0c;每次选出来树中编号最小的点且度数为一&#xff08;即叶子节点&#xff09; 二&#xff0c;将与被删去的点相连的节点加入prufer序列中 重复一&#xff0c;二&#xff…

oracle11g高可用,oracle11g 搭建DG环境总结

本帖最后由 zhofly 于 2016-6-24 23:19 编辑测试环境为&#xff1a;两台服务器配置一样&#xff1a;Oracle Linux Server release 6.5 X86_64, DB 11.2.0.4.0前提环境&#xff1a;一台已经安装好数据库软件并创建数据库实例的服务器另一台也就是备库&#xff0c;只安装了数据…

树的计数(prufer序列 或 purfer序列)

题解 首先我们要知道一条性质&#xff0c;prufer序列中的某个点出现次数为该点在树中度数-1 感性理解一下&#xff0c;其实按照prufer序列求法自己推一下就出来了 设题目里给的度为$d[]$ 先将所有的d-- 然后按照排列组合得出来 这是多重集排列数 首先从n-2中选择d[1]个数是$C_{…

PHP 织梦 帝国那个好,帝国、PHPCMS及织梦对比(十):推荐位功能

网站中发布的文章除了需要按时间、栏目分类、类别调用外&#xff0c;往往需要根据编辑的推荐进行不同的调用&#xff0c;那么CMS自然少不了推荐位功能。一般推荐位的设计都有首页头条、首页幻灯焦点、首页推荐、栏目页推荐、列表页推荐、内容页推荐等&#xff0c;基本可以满足站…

声明对象 创建对象_流利的对象创建

声明对象 创建对象关于此主题的文章很多&#xff08;绝大多数&#xff09;&#xff0c;但我只是想贡献我的两分钱&#xff0c;并写一篇简短的文章&#xff0c;介绍如何使用Java中的Fluent Object Creation模式或对象构建器实例化Value Objects。 值对象是由其状态&#xff08;…

shell脚本之shellcode自动提取工具

最近一直在忙着写论文。突然领导又分配任务&#xff0c;帮写个自动提取shellcode的脚本工具。因为之前&#xff0c;我们都是用objdump查看后&#xff0c;把shellcode一个个添加进去&#xff0c;很麻烦&#xff0c;害怕写错。所以说我们写这个工具还是挺有必要的。首先我们要先了…

Apache Kafka流+机器学习(Spark,TensorFlow,H2O.ai)

我于2017年5月开始在Confluent工作&#xff0c;担任技术传播者&#xff0c;专注于围绕开源框架Apache Kafka的主题。 我认为机器学习是当今最热门的流行语之一&#xff0c;因为它可以在任何行业中增加巨大的商业价值。 因此&#xff0c;您还会从我这里收到有关Apache Kafka&…