蒟蒻求助!!!!QAQ

P2157 [SDOI2009] 学校食堂

连个代码都不贴谁知道
by __Hacheylight__ @ 2019-09-12 11:10:49


不要怀疑1.5K通过的题目的数据
by 7KByte @ 2019-09-12 12:47:19


@[__Hacheylight__](/space/show?uid=54900) ``` #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define t(i) mn[i].t #define b(i) mn[i].b int dp[1005][(1<<8)+5][20],tim[1015][1015]; int n,t;struct ziji{int t,b;}mn[1005]; int main(){ scanf("%d",&t); while(t--){ memset(dp,0x3f3f3f,sizeof(dp));memset(tim,-1,sizeof(tim)); dp[1][0][7]=0;scanf("%d",&n); for(register int i=1;i<=n;i++) scanf("%d%d",&t(i),&b(i)); for(register int i=1;i<=n;i++) for(register int j=1;j<=n;j++) if(i!=j) tim[i][j]=(t(i)^t(j)); for(register int i=1;i<=n;i++)for(register int j=0;j<1<<8;j++) for(register int k=-8;k<=7;k++)if(dp[i][j][k+8]!=0x3f3f3f){ if(j&1) dp[i+1][j>>1][k+7]=min(dp[i][j][k+8],dp[i+1][j>>1][k+7]); else{int dis=0x3f3f3f; for(register int h=0;h<=7;h++) if(!((j>>h)&1)){ if(i+h>dis) break; dis=min(dis,i+h+b(i+h)); dp[i][j|(1<<h)][h+8]= min(dp[i][j|(1<<h)][h+8],dp[i][j][k+8]+tim[i+k][i+h]); } } } int ans=0x3f3f3f; for(register int i=0;i<=8;i++) ans=min(ans,dp[n+1][0][i]); printf("%d\n",ans+1); }system("pause"); } ``` 就是这个的tim
by the_Death @ 2019-09-12 16:08:17


**UPUP**
by the_Death @ 2019-09-12 18:18:52



by ⚡皮卡丘⚡ @ 2019-09-12 18:22:51


@[the_Death](/space/show?uid=145411)
by juju @ 2019-09-12 18:26:08


```cpp min(dp[i][j|(1<<h)][h+8],dp[i][j][k+8]+tim[i+k][i+h]); ``` 这里 $\text{tim}$ 会超 1005
by juju @ 2019-09-12 18:26:55


@[the_Death](/space/show?uid=145411)
by juju @ 2019-09-12 18:32:16


@[havZRiu](/space/show?uid=97875) 谢谢大佬OvO
by the_Death @ 2019-09-13 09:10:18


|