1 条题解
-
0
#include<bits/stdc++.h> using namespace std; int n; struct node{ int a,b; }a[1010]; int ans; int dp[1010][6010][2]; bool f[1010][6010][2]; signed main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i<=n;i++)cin>>a[i].a>>a[i].b; memset(f,0,sizeof(f)); memset(dp,127,sizeof(dp)); f[0][0][0]=1; dp[0][0][0]=0; f[0][0][1]=1; dp[0][0][1]=0; for(int i=1;i<=n;i++){ for(int j=-6000;j<=6000;j++){ int x1,x2; x1=j-(a[i].a-a[i].b),x2=j-(a[i].b-a[i].a); if(x1>=0){ int y1=abs(x1); if(j>=0){ if(f[i-1][y1][0])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][0]),f[i][abs(j)][0]=1; } else{ if(f[i-1][y1][0])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][0]),f[i][abs(j)][1]=1; } } else{ int y1=abs(x1); if(j>=0){ if(f[i-1][y1][1])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][1]),f[i][abs(j)][0]=1; } else{ if(f[i-1][y1][1])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][1]),f[i][abs(j)][1]=1; } } if(x2>=0){ int y1=abs(x2); if(j>=0){ if(f[i-1][y1][0])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][0]+1),f[i][abs(j)][0]=1; } else{ if(f[i-1][y1][0])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][0]+1),f[i][abs(j)][1]=1; } } else{ int y1=abs(x2); if(j>=0){ if(f[i-1][y1][1])dp[i][abs(j)][0]=min(dp[i][abs(j)][0],dp[i-1][y1][1]+1),f[i][abs(j)][0]=1; } else{ if(f[i-1][y1][1])dp[i][abs(j)][1]=min(dp[i][abs(j)][1],dp[i-1][y1][1]+1),f[i][abs(j)][1]=1; } } } } for(int i=0;i<=6000;i++){ if(f[n][i][1]&&f[n][i][0]){ cout<<min(dp[n][i][1],dp[n][i][0]); return 0; } if(f[n][i][1]){ cout<<dp[n][i][1]; return 0; } if(f[n][i][0]){ cout<<dp[n][i][0]; return 0; } } return 0; }
- 1
信息
- ID
- 481
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 158
- 已通过
- 40
- 上传者