您的位置:首页 > 其它

百度之星 初赛第二场

2012-06-03 12:14 127 查看
A   简单DP

#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 100005
int main()
{
long long n;
long long num[MAX], dp[MAX];
cin>>n;
for(int i=0; i<n; i++)
cin>>num[i];

dp[0]=num[0];

for(int i=1; i<n; i++)
{
dp[i]=num[i];
for(int j=0; j<i; j++)
{
if(dp[i]<(dp[j]^num[i]))
dp[i]=dp[j]^num[i];
}
}

sort(dp, dp+n);

int temp;
for(int i=n-1; i>=0; i--)
if(dp[i]!=dp[n-1])
{
temp = i;
break;
}

cout<<dp[n-1]<<" "<<dp[temp]<<endl;
}


C 简单枚举
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 100005
struct Node
{
int score;
int ID;
int th;
}node[MAX];
struct fr
{
int xi;
int yi;
}frie[1005];

struct Gift
{
int ki;
int ai;
int bi;
}gift[2];

bool Cmp(Node a, Node b)
{
return a.score>b.score;
}
int main()
{
int n;
int xi, yi;
int ki, ai, bi;
int visited[1005]={0};
cin>>n;
for(int i=0; i<n; i++)
{
cin>>frie[i].xi>>frie[i].yi;
}
for(int i=0; i<2; i++)
cin>>gift[i].ki>>gift[i].ai>>gift[i].bi;
int k=0;
for(int i=0; i<2; i++)
for(int j=0; j<n; j++)
{
node[k].score=gift[i].ai*frie[j].xi+gift[i].bi*frie[j].yi;
node[k].ID=j;
node[k].th = i;
k++;
}

sort(node, node+2*n, Cmp);

int temp = n;
int sum =0 ;
for(int i=0; i<2*n&&temp>0; i++)
{
if( gift[node[i].th].ki>0 &&!visited[node[i].ID])
{
sum+=node[i].score;
visited[node[i].ID]=1;
gift[node[i].th].ki--;
temp--;

}
}

cout<<sum<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  百度 struct bi c