今天的题目跟前几天的比起来简单了许多

由于T1没有开long long 所以T1全部WA掉了...只悲催的A了第二题

T1:多重背包

其实这一题我真心不会,DP各种弱,简直欲哭无泪...

不过认真的看了会儿书,算是领会了些什么吧

晚上跟我室友讲解了一遍,竟然神奇的全明白了...瞬间开森起来

代码+解释:

#include<cstdio>
#include<cstring>
using namespace std;
long long v[2100][2100],n,m,a[2001],b[2001],f[2100][2001],min;
//v是表示所用的时间;
//f[i][j]是表示前i个课题选j个论文所用的最短时间;
long long p(int x,int y){
long long s=1;
for(int i=1;i<=y;i++) s*=x;
return s;
}
int main(){
//freopen("problem.in","r",stdin);freopen("problem.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&a[i],&b[i]);
}
for(int i=1;i<=n;i++)
f[1][i]=a[1]*p(i,b[1]);//从前一个状态推下去,把f[i][j]初始化为选第一种课题写i篇论文所用的时间;
for(int i=2;i<=m;i++){//枚举前i个课题
for(int j=1;j<=n;j++){//共写了j篇论文
min=f[i-1][j];
for(int k=1;k<=j;k++){//当前的第i个课题所写的论文数
if(min>f[i-1][j-k]+a[i]*p(k,b[i]))//f[i-1][j-k]表示,i-1个课题所写的论文;然后再加上当前课题写的论文数
min=f[i-1][j-k]+a[i]*p(k,b[i]);
}
f[i][j]=min;//最后记得赋值
}
}
printf("%lld",f[m][n]);
return 0;
}

MARK...记得注意数据规模..

以及用long long 的时候,记得用上lld...(哲熊说有可能会出现编译器问题,建议我用cout)

T2:数论

分析之后发现,数大的那个人%4==0,那么数小的那个人胜...反之,如果有余数,即数大的人胜

#include<cstdio>
#include<cstring>
using namespace std;
int n,m;
int main(){
freopen("robotb.in","r",stdin);
freopen("robotb.out","w",stdout);
for(int i=1;i<=10;i++){
scanf("%d%d",&n,&m);
if(n<m){
if(m%4==0) printf("1\n");
else printf("2\n");
}
else{
if(n%4==0) printf("2\n");
else printf("1\n");
}
}
return 0;
}

T3:单源最短路Dijkstra

算是学了把两种单源最短路的算法都学到了吧...

还有一种是spfa..

对了我上次特地对比了一下spfa和BFS..发现他们的不同之处就在于spfa有记录下他们的距离...

就类似于

if(f[a]+f[b]<f[t]) f[t]=f[a]+f[b]

这样的记录

现在仔细想想dijkstra和spfa有很多相似之处,就比如都需要记录下最短的距离..以及都需要一个bool数组,记录他有没有入队吧..

附上自己程序和自己理解

PS:不懂为什么自己程序照着某位大神的程序改的,居然在计算方案数上貌似错了...希望自己某天再看的时候可以发现吧

#include<cstdio>
#include<cstring>
using namespace std;
int n,m,x,y,f[1001],z,tree[1001][1001],min=123456789;
int size[1001],p=0,t;
bool b[1001];
int main(){
//freopen("syrup.in","r",stdin);freopen("syrup.out","w",stdout);
freopen("data.txt","r",stdin);
memset(b,false,sizeof(b));
scanf("%d",&n);
for(int i=1;i<=n;i++){//一个小细节注意一下:这里的药水号数是从0开始的,但是为了不乱掉从1开始读入;
scanf("%d",&f[i]);
size[i]=1;
}
while(scanf("%d%d%d",&x,&y,&t)!=EOF){
x++; //也就是上面的注解
y++;
t++;
tree[x][y]=t;//存图
tree[y][x]=t;
}
for(int i=1;i<=n;i++){
min=123456789;
for(int j=1;j<=n;j++){
if(!b[j] && f[j]<min){
min=f[j];//记录最小的
p=j;//p记录第几号药水
}
}
if(min==123456789 || p==0) break;
b[p]=1;//记录他已经找过了
for(int j=1;j<=n;j++){
if(tree[p][j]!=0){
t=tree[p][j];
if(f[p]+f[j]<f[t]){//dijkstra算法
f[t]=f[p]+f[j];
size[t]=0;//个人认为是因为上面的方案不可行..所以附为0;貌似...
}
}
if(b[j] && f[p]+f[j]==f[t]){
size[t]+=size[p]*size[j];
}
}
}
printf("%d %d",f[1],size[1]);
return 0;
}

再附上AC的程序:

var n,i,j,x,y,t,min,p:longint;
f,size:array[0..1000] of longint;
tree:array[0..1000,0..1000] of longint;
b:array[0..1000] of boolean; begin
assign(input,'syrup.in');reset(input);
assign(output,'syrup.out');rewrite(output);
readln(n);
for I:=1 to n do
begin
read(f[i]);
size[i]:=1;
end;
while not eof do
begin
read(x,y,t);
inc(x);inc(y);inc(t);
tree[x,y]:=t;
tree[y,x]:=t;
end; for i:=1 to n do
begin
min:=maxlongint;
for j:=1 to n do
begin
if (not b[j]) and (f[j]<min) then
begin
min:=f[j];
p:=j;
end;
end;
if (min=maxlongint) or (p=0) then exit;
b[p]:=true;
for j:=1 to n do
begin
if tree[p,j]<>0 then
begin
t:=tree[p,j];
if f[p]+f[j]<f[t] then
begin
f[t]:=f[p]+f[j];
size[t]:=0;
end;
if (b[j]) and (f[p]+f[j]=f[t]) then
inc(size[t],size[p]*size[j]);
end;
end;
end; writeln(f[1],' ',size[1]);
close(input);close(output);
end.

=-=我觉得真的一模一样啊....真奇怪啊...

T4:广搜+二分答案..

TAT...依旧没时间改了...惨...我貌似已经累积了好几题了...说多了都是自己弱啊..

总之...今天收获不错..学到了许多东西

明天BLESS ALL

D5的更多相关文章

  1. 求解方程A5+B5+C5+D5+E5=F5

    方程A5+B5+C5+D5+E5=F5刚好有一个满足0<A≤B≤C≤D≤E≤F≤75的整数解.请编写一个求出该解的程序: using System; namespace ReverseTheEx ...

  2. 【Java笔记】【Java核心技术卷1】chapter3 D5运算符

    package chapter3; import java.math.*; //引入数学类 //枚举类型 enum Size{SMALL,MEDIUM,LARGE}; public class D5运 ...

  3. 正式班D5

    2020.10.10星期六 正式班D5 一.上节课复习 1.硬盘分类 ​ 1.机械磁盘 ​ io时间=平均寻道时间+平均延迟时间 ​ buffer:写缓冲区 ​ cache:都缓存 ​ 2.固态硬盘 ...

  4. D5转Xe点滴

    1. VarIsNull 函数已经被 Variants 单元, 相应的 Var 相关都放在哪 2.原本在 SysUtils 下的部分格式函数或定义,例如 .DecimalSeparator:  Sho ...

  5. 阿里云ECS每天一件事D5:安装php5.4.34

    原本是想把php和nginx合在一起来说的,不过考虑后,还是分开来做吧,已熟悉的更透彻一些. 1.准备类库 yum install autoconf automake libtool re2c fle ...

  6. [补档]暑假集训D5总结

    %dalao 今天又有dalao来讲课,讲的是网络流 网络流--从入门到放弃:7-29dalao讲课笔记--https://hzoi-mafia.github.io/2017/07/29/27/   ...

  7. 【重学计算机】操作系统D5章:文件系统

    1. 文件系统 文件系统概述 文件的组织: 逻辑结构:流式.记录式 物理结构:顺序.连接.直接.索引 文件的存取:顺序.直接.索引 文件的控制:逻辑控制.物理控制 文件的使用:打开.关闭.读.写.控制 ...

  8. 【重学计算机】机组D5章:指令系统

    1. 指令系统基本概念 指令集:一台机器所有指令的集合.系列机(同一公司不同时期生产):兼容机(不同公司生产) 指令字长:指令中包含的二进制位数,有等长指令.变长指令. 指令分类 根据层次结构:高级. ...

  9. D5 F

    最近见到了好多跟排列有关的状压dp,好像略微会了一点,用 dp[i][s][j]表示第i位状态为s选择j的方案数,然后递推. 早起大概可以提高人的智商但是会导致人甚至不清,初始化写错了自闭了半个小时 ...

随机推荐

  1. Loadrunner11.00破解方法

    1.下载 从http://www.jb51.net/softs/71240.html上面下载到loadrunner 11.0 2.安装loadrunner 11.0 下载之后,我是直接解压到硬盘,再安 ...

  2. PowerDesigner设置

    sql语句中表名与字段名前的引号去除: 打开cdm的情况下,进入Tools-Model Options-Naming Convention,把Name和Code的标签的Charcter case选项设 ...

  3. jquery 元素控制(附加元素/其他内容)引进和应用

    一个.在内部元素/外部附加元件 append,prepend:加入到该子元素  before,after:元素加入 html: <div id="content"> 在 ...

  4. cmd介面,进adb命令提示符error

    有几个操作的电话系统测试,需要输入adb命令时出现了头疼的事,当输入命令,一个直接报执行:error 推荐处理的方法: 1.当然就是关机重新启动.之前我是这样,挺麻烦.必进在win7上输入命令费时间. ...

  5. 前端构建利器Grunt—Bower

    runt + Bower—前端构建利器 目前比较流行的WEB开发的趋势是前后端分离.前端采用重量级的Javascript框架,比如Angular,Ember等,后端采用restful API的Web ...

  6. JUnit4教程-高速入口

    前言 大学刚学java当听说JUnit该,单元测试框架,使用非常简单的测试框架,JUnit测试测试框架将更加方便,easy.编写測试代码也是简单.明了,功能强大.今天我给大家简单分享一下最新JUnit ...

  7. php中des加密解密 匹配C#des加密解密 对称加密

    原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数  可以用于C#和php通信 对数据进行加密,其中$key 是 ...

  8. 《Shell十三问》笔记(下)

    继续开始shell十三问中11-13问和后续补充的笔记,加油! (14)输入重定向与输出重定向 “>”是标准输出重定向,可以把输出结果送入文件 “<”是标准输入重定向,可以重新指定文件的内 ...

  9. FPGA 设计怎样进行面积优化(逻辑资源占用量优化)

    FPGA面积优化 1 对于速度要求不是非常高的情况下,我们能够把流水线设计成迭代的形式,从而反复利用FPGA功能同样的资源. 2 对于控制逻辑小于共享逻辑时,控制逻辑资源能够用来复用,比如FIR滤波器 ...

  10. 在Ubuntu中编译QT工程Tesful

    今天晚上开机到Ubuntu中了,试了一下之前在Windows下建立的Tesful工程,发现没有任何改动就可以编译成功/运行. 附上图: