旅行安排

★   输入文件:plana.in   输出文件:plana.out   简单对比
时间限制:5 s   内存限制:128 MB

【题目描述】

SYgg和MM要出去旅行,出行前规划旅行方案时,MM给SYgg出了一个难题。她说,在她心中,不同的地方能给她不同的感受,而感受可以用喜爱值Li表示出来,她希望这次旅行能正好得到W的喜爱值。为了考验SYgg是否爱他,她只是给了SYgg所有的Li和W值,却并不告诉SYgg哪个是哪个…

SYgg手头比较紧,只能支付去三个地方的费用,所以SYgg必须从这些数中找出三个Li和一个W,并且使W尽量的大。

SYgg一心想和MM去旅行,哪里有时间想这个问题,所以,交给了SYoi同仁的你…

【输入格式】

输入数据有两组(为了防止No Solution骗分)。

对于每一组,第一行n表示有n个数值,接下来n行为每个数值的大小。

【输出格式】

两组输出。分别为每组的答案。如果可以找出三个Li和一个W,那么就输出最大的W,如果不能,就输出No Solution

【样例输入】

4 
5 
5 
5 
5 
4 
1 
2 
3 
6 

【样例输出】

No Solution 
6 

【提示】

对于30%的数据,1≤n≤100

对于100%的数据,1≤n≤1000,Li和W都属于[−536870911,536870911]

输了,只有80;

 1 #include<map>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 const int maxn=1e3+10;
 6 int n,p,ans;
 7 int s[maxn];
 8 map<int,int>v;
 9 bool comp(int a,int b){return a>b;}
10 int main(){
11     freopen("plana.in","r",stdin);
12 //    freopen("plana.out","w",stdout);
13     ans=-1e9;
14     scanf("%d",&n);
15     for(int i=1;i<=n;i++) scanf("%d",&s[i]);
16     for(int i=1;i<=n;i++)
17     for(int j=i+1;j<=n;j++)
18     v[s[i]+s[j]]=1;
19     sort(s+1,s+n+1,comp);
20     for(int i=1;i<=n;i++)
21     for(int j=1;j<=n;j++)
22     if(v[s[i]-s[j]]==1) ans=max(ans,s[i]),p=1;
23     if(p==1) printf("%d\n",ans);
24     else puts("No Solution");
25     ans=-1e9;
26     scanf("%d",&n);
27     for(int i=1;i<=n;i++) scanf("%d",&s[i]);
28     for(int i=1;i<=n;i++)
29     for(int j=i+1;j<=n;j++)
30     v[s[i]+s[j]]=2;
31     sort(s+1,s+n+1,comp);
32     for(int i=1;i<=n;i++)
33     for(int j=1;j<=n;j++)
34     if(v[s[i]-s[j]]==2) ans=max(ans,s[i]),p=2;
35     if(p==2) printf("%d\n",ans);
36     else puts("No Solution");
37     return 0;
38 }

 

posted @ 2017-09-02 20:06  J_william  阅读(240)  评论(0编辑  收藏  举报