求教

P1070 [NOIP2009 普及组] 道路游戏

在线等,急
by zhz小蒟蒻 @ 2019-06-08 13:42:32


程序附上(我只写了一个爆搜) ``` #include <iostream> #include <cstdio> using namespace std; int n,m,p,ans=-99999999; int a[1011][1011],robert[1011]; void dfs(int step,int ke,int bu,int money,int jnum); int main() { // freopen(".in","r",stdin); // freopen(".out","w",stdout); scanf("%d %d %d",&n,&m,&p); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]); for(int i=1;i<=n;i++) scanf("%d",&robert[i]); for(int i=1;i<=n;i++) dfs(i,1,0,0,0); printf("%d",ans); return 0; } void dfs(int step,int ke,int bu,int money,int jnum) { if(ke==m+1) { ans=max(ans,money-jnum); return; } if(ke==1) { for(int i=p;i>=1;i--) { if(step==n) dfs(1,ke+1,i-1,money+a[step][ke],jnum+robert[step]); else dfs(step+1,ke+1,i-1,money+a[step][ke],jnum+robert[step]); } } if(bu==0) { for(int i=p;i>=1;i--) { if(step==n) dfs(1,ke+1,i-1,money+a[step][ke],jnum+robert[step]); else dfs(step+1,ke+1,i-1,money+a[step][ke],jnum+robert[step]); } } else { if(step==n) dfs(1,ke+1,bu-1,money+a[step][ke],jnum); else dfs(step+1,ke+1,bu-1,money+a[step][ke],jnum); } } ```
by zhz小蒟蒻 @ 2019-06-08 13:59:41


.
by Ticzone @ 2019-06-08 14:00:20


太强了,%%%orz
by charliegong @ 2019-06-08 14:43:32


|