连个代码都不贴谁知道
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