这题的最坑的地方就是每步可能会有两种情况,这两情况起初我都单独考虑了,但就是没放在一起考虑。。。wa个不停,果然贪心是一个很考验思维的东西。
这里可以这样考虑,在运人的过程中,河的起始岸最后终将剩下一个或者两个 人,并且是用时最大的。所以这个时候就会有两种情况,dp[i]=dp[i-1]+time[i]+time[0]
或者dp[i]=dp[i-1]+time[i]+time[0]+2*time[1];可见这类似于递归的思想。
#include"iostream"#include"algorithm"const int mx=10005;int time[mx];int dp[mx];//记录每步的最少时间using namespace std;int main(){ int t,i,j,n; cin>>t; while(t--) { cin>>n; for(i=0;i>time[i]; sort(time,time+n); dp[0]=time[0]; dp[1]=time[1]; for(i=2;i