做淘宝联盟网站要多少钱?,做ppt选小图案的网站,地板网站建设,ui网站设计模板过河问题时间限制#xff1a;1000 ms | 内存限制#xff1a;65535 KB难度#xff1a;5描述在漆黑的夜里#xff0c;N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话#xff0c;大家是无论如何也不敢过桥去的。不幸的是#xff0c;N个人一共只带了一只…过河问题时间限制1000 ms | 内存限制65535 KB难度5描述在漆黑的夜里N位旅行者来到了一座狭窄而且没有护栏的桥边。如果不借助手电筒的话大家是无论如何也不敢过桥去的。不幸的是N个人一共只带了一只手电筒而桥窄得只够让两个人同时过。如果各自单独过桥的话N人所需要的时间已知而如果两人同时过桥所需要的时间就是走得比较慢的那个人单独行动时所需的时间。问题是如何设计一个方案让这N人尽快过桥。 输入第一行是一个整数T(1T20)表示测试数据的组数每组测试数据的第一行是一个整数N(1N1000)表示共有N个人要过河每组测试数据的第二行是N个整数Si,表示此人过河所需要花时间。(0Si100)输出输出所有人都过河需要用的最少时间样例输入1
4
1 2 5 10样例输出17来源POJ上传者张云聪思路 在n3的时候就用前两个小的来带后两个大的也就是1,2先过然后1回来然后n,n-1过然后2,回来如果n3的时候就1,2过然后1回来然后1,3过就过来了如果n2时1,2一起过如果n1时直接1过来就行了代码#include stdio.h#include string.h#include algorithmusing namespace std;int a[10005];int vis[10005];int main(){ int T; scanf(%d,T); while(T--){ int n; scanf(%d,n); for(int i1;in;i){ scanf(%d,a[i]);}sort(a1,a1n); int sum0,kn; while(k3){ if(a[k]a[k-1]2*a[1]a[1]a[k]2*a[2]){suma[1]a[k]2*a[2];k-2;} else{suma[k]a[k-1]2*a[1];k-2;}} if(k3){suma[1]a[2]a[3];} if(k2){suma[2];} if(k1){suma[1];} printf(%d\n,sum);} return 0;}