| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
WHY WA#include<iostream>
#include<string>
//#include<algorithm>
using namespace std;
typedef struct stone
{
int p;
int v;
}stone;
stone *s;
int n,d; //
bool used[12];//标记数组。
int Imax=0; //当前的最大值。
void search(int k,int curA,int curB,int valueA,int valueB,int flag)
{//flag表示当前放置哪个。0 A, 1 B.
if(k==n)
{
if(valueB>Imax) Imax=valueB;
return;
}
else
{
if(curA==0&&curB==0)
{//初始化为刚开始必须是A.
//for(int i=0;i<n;i++)
//{
// if(!used[i])
// {
used[0]=true;
search(k+1,curA+s[0].p,curB,valueA+s[0].v,valueB,0);
used[0]=false;
// }
//}
}
else
{
for(int i=0;i<n;i++)
{
if(!used[i]&&!flag)
{
if( curA+s[i].p-curB>=d)
{//大 flag ->1.
used[i]=true;
search(k+1,curA,curB+s[i].p,valueA,valueB+s[i].v,1);
used[i]=false;
}
else
{
used[i]=true;
search(k+1,curA+s[i].p,curB,valueA+s[i].v,valueB,0);
used[i]=false;
}
}
if(!used[i]&&flag)
{
if(curB+s[i].p-curA>=d)
{
used[i]=true;
search(k+1,curA+s[i].p,curB,valueA+s[i].v,valueB,0);
used[i]=false;
}
else
{
used[i]=true;
search(k+1,curA,curB+s[i].p,valueA,valueB+s[i].v,1);
used[i]=false;
}
}
}
}
}
}
int main()
{
while(scanf("%d%d",&n,&d)!=EOF)
{
s=new stone[n+1];
for(int i=0;i<n;i++)
{
scanf("%d%d",&s[i].p,&s[i].v);
}
Imax=0;
//cur=0;
memset(used,false,sizeof(used));
search(0,0,0,0,0,0);
printf("%d\n",Imax);
delete []s;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator