| ||||||||||
| 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 | |||||||||
Re:太可耻了,居然企图用递归过……In Reply To:太可耻了,居然企图用递归过…… Posted by:adamgic at 2005-12-23 05:11:07 #include<iostream>
using namespace std;
int i,n,card[1000],gameid=1,win,sum;
int DP(int start,int end)
{
int a,b,c,d;
if(start+1==end)return max(card[start],card[end]);
if(card[start+1]>=card[end]){a=start+2;b=end;}
else {a=start+1;b=end-1;}
if(card[start]>=card[end-1]){c=start+1,d=end-1;}
else {c=start;d=end-2;}
return max(card[start]+DP(a,b),card[end]+DP(c,d));
}
int main()
{
while(cin>>n && n){
sum=0;
for(i=0;i<n;i++){
scanf("%d",&card[i]);
sum+=card[i];
}
win=DP(0,n-1);
printf("In game %d, the greedy strategy might lose by "
"as many as %d points.\n",gameid++,2*win-sum);
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator