zoukankan      html  css  js  c++  java
  • P2625 豪华游轮 (背包$dp$,数学)

    题目链接


    Solution

    贼有意思的一个题目。
    可以发现阻止我们走的更远的就是那些需要反向走的路程。
    然后发现当角度越接近 (180^circ) ,对我们最终的答案则更优。
    所以先是一个背包把可以达到的角度处理一下,然后再直接算就好了。
    卡精度。

    Code

    #include<bits/stdc++.h>
    #define pi 3.141592653589
    using namespace std;
    int p[1001];
    int n,cnt,tot;
    int v[400],h[400];
    double ans=1000,sum,sup;
    
    int main()
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		string s; cin>>s;
    		int ww; cin>>ww;
    		if(s[0]=='f') sum+=ww;
    		if(s[0]=='b') sup+=ww;
    		if(s[0]=='l') p[++cnt]=-ww;
    		if(s[0]=='r') p[++cnt]=ww;
    	}
    	v[0]=1;
    	for(int i=1;i<=cnt;i++)
    	for(int j=0;j<360;j++)
    	{
    		if(v[j])
    		h[(j+p[i]+3600)%360]=1;
    		v[j]=h[j];
    	}
    	for(int i=0;i<360;i++)
    	if(!v[i]) continue;
    	else 
    	if(abs(i-180)<ans)
    	ans=abs(i-180);
    	
    	ans=(ans/(180*1.0000))*pi;
    	
    	double kk=cos(ans);
    	double cc=sin(ans); 
    	double hen=sup*cc;
    	double shu=sup*kk+sum;
    	double Ans=sqrt(pow(hen,2)+pow(shu,2));
    	
    	printf("%.6lf
    ",Ans);
    	return 0;
    }
    
  • 相关阅读:
    java中的lamda表达式
    Arrays.sort()中Lambda表达式
    检索中的函数及不同范围的处理
    2014.6.24
    2014.6.23
    第六天培训
    第五天培训
    第四天培训
    第三天培训!
    第二天培训
  • 原文地址:https://www.cnblogs.com/Kv-Stalin/p/9811716.html
Copyright © 2011-2022 走看看