H - Graphics(dfs)
Description
Ocean最近迷上了图形学,整天就在电脑上写程序画呀画......
这天Ocean想画一个二维平面下的圆,
但他的电脑出了一点莫名其妙的问题。
假设Ocean只能用程序实现$45$度圆弧、$90$度圆弧、$180$度圆弧,而且程序耗时分别是$a、b、c$。
如果Ocean连续画圆心角相同的圆弧,那么程序执行时间将会是上一次的$2$倍。
比如说:
第一次Ocean画圆心角为$45$度的圆弧耗时为$a$。
第二次Ocean还是画圆心角为$45$度的圆弧,耗时为$2 * a$。
第三次Ocean还是画圆心角为$45$度的圆弧,耗时为$4 * a$。
......
如果Ocean下次画圆心角不同的圆弧,那么程序执行将会额外增加一定的时间$d$。
比如说:
Ocean上一次画$45$度的圆弧,这一次画$90$度圆弧,程序执行时将会额外增加时间$d$。
Ocean上一次画$90$度的圆弧,这一次画$180$度圆弧,程序执行时将会额外增加时间$d$。
......
马上就要图形学课设了,Ocean需要用最短的程序执行时间来完成这个圆,请你帮帮他吧。
PS:任意两个圆弧不能重复覆盖,而且所有圆弧的弧长是相等的。
C++输入输出务必使用scanf 和 printf。
Input
每组数据依次输入四个整数$a,b,c,d,$分别代表上面提到的信息。
注:$1 <= T <= 200000, 1 <= a, b, c, d <= 1000000。$
Output
Sample Input
2
1 1 1 2
1 2 4 1
Sample Output
3
10
Hint
对第二组测试数据,最优方案如下:
先画一个$90$度圆弧,第二次画$180$度圆弧,最后一次画$90$度圆弧。
总耗时$2 + 1 + 4 + 1 + 2 = 10。$
这道题我使用暴力解的,原来还可以用深搜的方法来解
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int INF=0x3f3f3f3f;
int a,b,c,d,ans;
int angle[]={,,};
int cost[];
void dfs(int x,int y,int id,int cnt)
{
int sum,time;
for(int i=;i<;i++)
{
sum=x+angle[i];
if(sum==)
{
if(i==id)
time=y+cost[i]*cnt*;
else
time=y+cost[i]+d;
ans=min(ans,time);
}
else if(sum<)
{
if(i==id)
dfs(sum,y+cost[i]*cnt*,i,cnt*);
else
dfs(sum,y+cost[i]+d,i,);
}
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
cost[]=a; cost[]=b; cost[]=c;
ans=INF;
for(int i=;i<;i++)
dfs(angle[i],cost[i],i,);
printf("%d\n",ans);
}
return ;
}
H - Graphics(dfs)的更多相关文章
- 深搜(DFS)广搜(BFS)详解
图的深搜与广搜 一.介绍: p { margin-bottom: 0.25cm; direction: ltr; line-height: 120%; text-align: justify; orp ...
- 【算法导论】图的深度优先搜索遍历(DFS)
关于图的存储在上一篇文章中已经讲述,在这里不在赘述.下面我们介绍图的深度优先搜索遍历(DFS). 深度优先搜索遍历实在访问了顶点vi后,访问vi的一个邻接点vj:访问vj之后,又访问vj的一个邻接点, ...
- 深度优先搜索(DFS)与广度优先搜索(BFS)的Java实现
1.基础部分 在图中实现最基本的操作之一就是搜索从一个指定顶点可以到达哪些顶点,比如从武汉出发的高铁可以到达哪些城市,一些城市可以直达,一些城市不能直达.现在有一份全国高铁模拟图,要从某个城市(顶点) ...
- 图的 储存 深度优先(DFS)广度优先(BFS)遍历
图遍历的概念: 从图中某顶点出发访遍图中每个顶点,且每个顶点仅访问一次,此过程称为图的遍历(Traversing Graph).图的遍历算法是求解图的连通性问题.拓扑排序和求关键路径等算法的基础.图的 ...
- 搜索——深度优先搜索(DFS)
设想我们现在身处一个巨大的迷宫中,我们只能自己想办法走出去,下面是一种看上去很盲目但实际上会很有效的方法. 以当前所在位置为起点,沿着一条路向前走,当碰到岔道口时,选择其中一个岔路前进.如果选择的这个 ...
- 7.9模拟赛T1图的遍历(dfs)
图的遍历(dfs) [题目描述] 对于一个有向图G来说,我们存在一个经典的遍历算法,就是DFS (深度优先搜索遍历).将G以1号点为起点进行DFS后,我们可以 得到G的一棵DFS遍历树T.就此,我们可 ...
- 7.6 T1 深度优先搜索(dfs)
深度优先搜索(dfs) [题目描述] sol:50pts随便写写,就是大众分了,直接n2dpOK,100分要找点规律,需要数学头脑 官方题解 //#include <bits/stdc++.h& ...
- 【转】android Graphics(四):canvas变换与操作
android Graphics(四):canvas变换与操作 分类: 5.andriod开发2014-09-05 15:05 5877人阅读 评论(18) 收藏 举报 目录(?)[+] 前言 ...
- LeetCode Subsets II (DFS)
题意: 给一个集合,有n个可能相同的元素,求出所有的子集(包括空集,但是不能重复). 思路: 看这个就差不多了.LEETCODE SUBSETS (DFS) class Solution { publ ...
随机推荐
- Changing the load order/delay the start of the Server service
THE INFORMATION IN THIS ARTICLE APPLIES TO: Secure FTP Server (All Versions) EFT Server (All Version ...
- inotify监测实例
/************************************************************************* > File Name: inotify.c ...
- dsm winscp 获得 root 权限修改上传文件
使用DSM开了ssh只可以用admin登陆scp没有权限上传文件.可以用以下方法. ssh 登陆 dsm sudo -i 取得root权限 修改 /etc/sudoers 文件中 %administ ...
- html 原生tab切换js
$("#ulId li").on('click', function () { $("#li-container").children().hide(); $( ...
- 值类型 struct
由于值类型存在装箱和拆箱的过程,所有导致在修改值类型对象内部数据时,有可能会出现一些与预想不同的结果. 比如 Point p = , ); Console.WriteLine(p); p.Change ...
- 并发之CAS无锁技术
CAS算法即是:Compare And Swap,比较并且替换: CAS算法存在着三个参数,内存值V,旧的预期值A,以及要更新的值B.当且仅当内存值V和预期值B相等的时候,才会将内存值 ...
- 查看linux中某个端口(port)是否被占用
1.使用lsof lsof -i:端口号 查看某个端口是否被占用 2.使用netstat 使用netstat -anp|grep 80
- 8-@Pointcut( "execution(* com.ctgu.controller.AccountController.transfer(..))" ) 拦截配置问题
@pointcut()可以直接指定到某个包下的某个类的某个方法上:
- cnblog博客管理
http://www.cnblogs.com/wc1903036673/ 12436109 https://www.cnb ...
- macOS 10.13 安装Virtualbox失败
macOS 10.13 安装Virtualbox失败 Enviroment macOS: 10.13 High Sierra virtualBox: 5.1.28 Problem descriptio ...