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 |
望路过的指点一下,DP题,不知道哪错了,实在看不出来,帮帮忙,先谢谢了!!#include<iostream> using namespace std; #define base 100000 int queen[200001][2],k,kk; int state[200001]; int s[100],f[100],n; int sums,sumf; int main() { scanf("%d",&n); int i,j; sums=sumf=0; for(i=0,j=0;i<n;i++) { scanf("%d%d",&s[j],&f[j]); if(s[j]<=0&&f[j]<=0) continue; else if(s[j]>0&&f[j]>0) { sums+=s[j]; sumf+=f[j]; continue; } j++; } queen[0][0]=sums; queen[0][1]=sumf; for(i=0;i<=200000;i++) state[i]=-200000; state[sums+base]=sumf; n=j; int x,y; kk=1; for(i=0;i<n;i++) { for(j=0,k=kk;j<k;j++) { x=queen[j][0]+s[i]; y=queen[j][1]+f[i]; if(state[x+base]==-200000) { state[x+base]=y; queen[kk][0]=x; queen[kk++][1]=y; continue; } if(y>state[x+base]) state[x+base]=y; } } int wyh=sums+sumf; for(i=0;i<kk;i++) { if(queen[i][0]>=0&&queen[i][1]>=0&&queen[i][0]+queen[i][1]>wyh) wyh=queen[i][0]+queen[i][1]; } printf("%d\n",wyh); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator