题解:区间dp,f[i][j]表示区间[i,j]的狼全部消灭的最小代价,设k为i、j间任意一点(i<=k<=j),且第k只狼被最后消灭,显然,区间总代价即可被我们划分成[i,k-1]和[k+1,j]两部分,我们可以假设他们已知,于是求得两区间代价和再加上消灭第k只狼的代价就能求得区间[i,j]的总代价.

状态转移方程:f[i][j]=f[i][k-1]+f[k+1][i]+a[k]+b[i-1]+b[j+1]。

PS:注意初始化时i要从0开始枚举,且若j<i时f值为0。

代码如下:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 #define INF 0x7fffffff
 5 using namespace std;
 6 int n,a[405],b[405],f[405][405],g[405][405];
 7 int main()
 8 {
 9     freopen("wolf.in","r",stdin);
10     freopen("wolf.out","w",stdout);
11     scanf("%d",&n);
12     for(int i=1;i<=n;i++) scanf("%d",&a[i]);
13     for(int i=1;i<=n;i++) scanf("%d",&b[i]);
14     for(int i=0;i<=n;i++)
15         for(int j=i;j<=n;j++){
16             if(i==j) f[i][j]=a[i]+b[j-1]+b[j+1];
17             else f[i][j]=INF;
18         }
19     for(int l=1;l<n;l++)
20         for(int i=1;i+l<=n;i++){
21             int j=i+l;
22             for(int k=i;k<=j;k++)
23                 f[i][j]=min(f[i][j],f[i][k-1]+f[k+1][j]+a[k]+b[i-1]+b[j+1]);
24         }
25     printf("%d",f[1][n]);
26     return 0;
27 }

-----------------------------------------------------------华丽的分割线---------------------------------------------------------------------

题解:首先,我们预处理1-88的斐波那契数列 f,可以推出一条规律:如果只有第i个数为答案,答案数为(i+1)/2,如果不保留这个数(此位为0),答案为(i-1)/2(“例子见下“*”)

我们从大到小枚举斐波那契数,如果f[i]比n小那么就把i存入a数组并把n-f[i],a[i]表示第i个1所在斐波那契数列第几项,于是得出一个像二进制的01串,我们就可以从低位向高位dp。

状态转移方程:①g[i][1]=g[i-1][0]+g[i-1][1](如果第i个1还为1,那么加入这个点对答案无影响,直接转移即可)

②g[i][0]=g[i-1][1]*(a[i]-a[i-1]-1)/2+g[i-1][0]*(a[i]-a[i-1])/2 (如果第i个1变成0,表明第i个1变成了前2项的和并继续向前拓展,统计答案方法如上,但是要注意如果前一个1还为1统计答案时区间长度-1,因为前一个1的位置不能用于统计)

初始化:g[1][1]=1,g[1][0]=(a[1]-1)/2;

*:若斐波那契数列第5项为1,可以把第5项改为0,并把3、4两项改为1,第4项无法再修改,可把第3项改为0,并把1、2项修改为1,总答案数为(5+1)/2=3;若不包含第5项(为0),答案数为(5-1)/2=2;

代码如下:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cmath>
 4 #include<algorithm>
 5 using namespace std;
 6 long long n,f[90],a[90],g[90][2];
 7 int main()
 8 {
 9     freopen("fibonacci.in","r",stdin);
10     freopen("fibonacci.out","w",stdout);
11     f[1]=1; f[2]=2;
12     for(int i=3;i<=88;i++) f[i]=f[i-1]+f[i-2];
13     int T; scanf("%d",&T);
14     while(T--){
15         scanf("%lld",&n);
16         int cnt=0;
17         for(int i=88;i>=1;i--)
18             if(f[i]<=n){n-=f[i],a[++cnt]=1LL*i;}
19         reverse(a+1,a+cnt+1);
20         g[1][1]=1;
21         g[1][0]=(a[1]-1)>>1;
22         for(int i=2;i<=cnt;i++){
23             g[i][1]=g[i-1][0]+g[i-1][1];
24             g[i][0]=((a[i]-a[i-1]-1)>>1)*g[i-1][1]+((a[i]-a[i-1])>>1)*g[i-1][0];
25         }
26         printf("%lld\n",g[cnt][0]+g[cnt][1]);
27     }
28     return 0;
29 }

转载于:https://www.cnblogs.com/Beginner-/p/7222966.html

2017省夏令营Day6相关推荐

  1. 计算机在生物工程中的应用 华中农业大学,华中农业大学生物信息、生物统计、农业信息工程 2017年夏令营通知...

    华中农业大学生物信息.生物统计.农业信息工程 2017年夏令营通知 一.华中农业大学信息学院简介 华中农业大学信息学科发展历史悠久.80年代中后期,学校在基础课部设立了计算机教研室.1996年9月开始 ...

  2. 人民大学计算机夏令营试题,中国人民大学信息学院2017年夏令营机试题目(考生回忆版)...

    中国人民大学信息学院2017年夏令营机试题目(考生回忆版) (6页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分 中国人民大学信息学院20 ...

  3. 2017福建夏令营Day7(数论)

    埃匹希斯水晶 (apexis) ⼤家都知道,卡德加是⼀个神奇的法师. 有⼀天,他发现了⼀种可以作⽤在埃匹希斯⽔晶上的魔法:在左右两个 祭坛上放⼀定量的⽔晶,然后施放⼀个法术,左边⼀堆的⽔晶数量会变成原 ...

  4. 2017省夏令营Day7

    题解:首先,我们可以得到一个规律:经过2次变换后,a和b的值都分别乘2了,所以只要用快速幂就能过啦,但是,要特判n为0的情况. 代码如下: 1 #include<cstdio> 2 #in ...

  5. 彩色方块 2017信息学夏令营第二场

    NKOJ 4223 彩色方块 问题描述 何老板最近在玩一款叫"彩色方块"的小游戏,游戏虽然简单,但何老板仍旧乐此不疲. 游戏中有n个彩色方块成一排,方块的颜色用字母表示,给出目标排 ...

  6. 理发时间 2017信息学夏令营第三场

    NKOJ4231 理发时间 时间限制 : 1000MS 空间限制 : 165536 KB 问题描述 何老板开了一家理发店,店里有m名发型师. 今天,信竞班的n名同学一起同时来到何老板的店,每个同学都要 ...

  7. 攻防世界 sql注入

    攻防世界supersql(兼buuctf随便注) 首先添加一个单引号1' --+发现出错. error 1064 : You have an error in your SQL syntax; che ...

  8. 浙江大学计算机保研条件_浙江大学保研有哪些步骤?

    ----------------------- 2020年5月更新 又到了一年一度的保研关键点,欢迎大家关注我的公众号(公众号:查尔de理想生活)留言提问,或者知乎私信咨询. ----------- ...

  9. 吉林大学计算机科学与技术学院推免,2017吉林大学计算机科学与技术大学生推免夏令营...

    2018考研交流群586254585 为了促进国内高校优秀大学生之间的学术交流,激发学生学习热情,提供开展高水平科学研究的机会.特此举办"2017年吉林大学计算机科学与技术学院优秀大学生暑期 ...

  10. 西工大计算机夏令营经验贴:2017~2019笔试、面试及完整流程

    前言:非常感谢多位学弟学妹的支持,他们提供了第一手资料,本着乐于助人的心态,一再要求我不署名,在此我们应该感谢这些同学的无私奉献!!! 资料来源:凤凰考研 公众号 西北工业大学2017年计算机学院硕士 ...

最新文章

  1. Linux/ubuntu:Chrome报错解决: error while loading shared libraries: libnss3.so libXss.so.1 libasound.so.
  2. 厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)(转)
  3. IT 部门事件管理模式建立分析
  4. Mybatis CRUD注解Annotation的使用
  5. linux centos6.5下安装svn方法
  6. caffe︱Places365-CNNs For Scene Recognition
  7. EXCEL怎样完整显示身份证号码
  8. 智慧公厕管理系统不断提升公厕管理水平
  9. 408考研复试之计算机组成原理笔记第一二三章
  10. 张孝祥javascript视频教程
  11. 个性化网管软件快速实现方法
  12. 磊科linux无线网卡驱动安装步骤,无线网卡驱动安装方法
  13. Lab4 Architecture Lab
  14. L2-3.名人堂与代金券
  15. 研发新人如何快速熟悉新项目和业务
  16. TBSchedule源码阅读1-TBScheduleManagerFactory
  17. 服务器,socket服务。
  18. 【Android楚君】【Python洪君】生成姓名: 根据性别、字数随机生成好听的名字
  19. java中ceil怎么用举例_Java ceil() 方法
  20. python的单引号怎么打出来_python如何输入单引号

热门文章

  1. wireshark 突然抓不到VMware接口的包记录
  2. 中琅领跑条码打印软件如何导入CDR文件
  3. Android 录音获取分贝值的办法
  4. uva 1045(二分图最大权匹配)
  5. HMM学习笔记_3(从一个实例中学习Viterbi算法)
  6. 我们的系统是否需要EJB3?
  7. TCP连接保活之Keepalive
  8. java包装经验_java中基本类型和包装类型实践经验
  9. oracle的游标的属性,Oracle 游标属性
  10. android 两个视频合并,手机如何合并视频片段 安卓手机多个视频合并成一个的方法...