nyoj 47 过河问题
2016-04-22 22:33
381 查看
题目47 - ACM在线评测系统 http://acm.nyist.net/JudgeOnline/problem.php?pid=47
就说不能那么简单,原来我考虑的成分确实太少了,首先n==3是个分界点,不信就手动算算,然后n>=4时,考虑先送过去用时最长的两个人,时间排序后
可能情况一:1将 n和n-1 送过去
可能情况二:1和2 先过去,1 送回灯,n和n-1过去,2 再送回灯
代码:
就说不能那么简单,原来我考虑的成分确实太少了,首先n==3是个分界点,不信就手动算算,然后n>=4时,考虑先送过去用时最长的两个人,时间排序后
可能情况一:1将 n和n-1 送过去
可能情况二:1和2 先过去,1 送回灯,n和n-1过去,2 再送回灯
代码:
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int a[1010]; int min(int a,int b) { return a<b?a:b; } int f(int n) { if(n<=2) return a[n-1]; if(n==3) return a[0]+a[1]+a[2]; else { return f(n-2)+min((a[n-1]+a[0]+a[1]+a[1]),(a[n-1]+a[n-2]+a[0]+a[0])); } } int main() { int t,n,sum; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); sum=f(n); printf("%d\n",sum); } return 0; }
相关文章推荐
- spring框架学习笔记(五)
- 零基础学习 Hadoop 该如何下手?
- 实现微信布局的四种方式(一)
- Linux 判断文件修改时间和系统时间差
- SQL语句截取字符串
- 谁的青春不迷茫
- Linux每天学习一个命令之find命令一
- centos7 lamp(moudle)
- CNNs学习笔记(2):deep learning训练过程
- WPS 或者 word 插入通栏图片
- Redis、Redis+sentinel安装(Ubuntu 14.04下Redis安装及简单测试)
- 第15章 套接字
- 结队练习源代码
- 初识hibernate
- 四.Linux系统中文搜索命令
- servlet详解(第二篇)
- 用户场景描述
- Linux每天学习一个命令之which命令
- BestCoder Round #81 (div.2) 1004 String(动态规划)
- app advice:苹果iOS 2.0 – iOS 8.0各版本发布时间表