北大ACM poj1700 poj3404
来源:互联网 发布:智能康复知多少 编辑:程序博客网 时间:2024/05/16 19:19
经典的过桥问题。只要这两道题一起做,就可以做对了(之前老是考虑少一种情况。。。思维能力有待提高)。
具体解法如下:
n==1时,直接输出答案
n==2时,输出最大值
n==3时,输出三者和
n>=4时,两种策略,均转化成4人时的情形求最优解。设4人过河速度为A<B<C<D,那么有两种策略:
先AB过,A回,CD过,B回,即temp=A+3*B+D
先AD过,A回,再AC过,A回,即temp=2*A+B+C+D(忘了这种情况)
然后取其中的最小值即可。也就是说,在2*B<A+C时选方案1,否则选方案2.
多做dp和贪心题是锻炼思维的好方法,以后要多多训练思维才行。
以下是代码:(poj 1700)
- #include<cstdio>
#include<algorithm>
using namespace std;
const int M=1100;
int a[M];
int n; - int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i;
bool flag=false;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
int ans=0;
while(n)
{
if(n==1)
{
ans+=a[1];
n=0;
}
else if(n==2)
{
ans+=a[2];
n=0;
}
else if(n==3)
{
ans+=a[1]+a[2]+a[n];
n=0;
}
else
{
if(2*a[2]<a[1]+a[n-1])
{
ans+=a[1]+2*a[2]+a[n];
n-=2;
}
else
{
ans+=2*a[1]+a[n-1]+a[n];
n-=2;
}
}
}
printf("%d/n",ans);
}
return 0;
}
poj 3404 的只要把case那个去掉即可,看了题目就懂了。
- 北大ACM poj1700 poj3404
- 北大ACM
- poj1700
- poj1700
- poj1700
- poj1700
- poj1700
- POJ1700
- POJ1700
- 北大ACM-题型分类
- 北大ACM题型分类
- 北大ACM做题小软件
- 北大acm 题型分类
- 北大ACM分类初期
- 北大ACM题分类
- 北大ACM题型分类
- 北大ACM题型分类
- 北大ACM-题型分类
- C 宏定义的简单总结
- Redis插入性能测试
- hdu 4340 Capturing a country
- Javascript中判断浏览器类型
- 内存泄露检查工具valgrind--通用命令选项
- 北大ACM poj1700 poj3404
- U-Boot编译过程完全分析-make ***_config 和mkconfig脚本,include/config.mk,include/config.h
- 哈希树
- url进行重写和二级域名的url重写
- 实现一个jsp页面2种格式,隐藏部分部件,显示部分部件
- hdu 1010 Tempter of the Bone
- 如何自定义协议从自己的一个app打开另一个app
- DevExpress10.1中文教程:3
- 黑马程序员_窗体应用程序练习之图片飞飞