找不到错误…………WA了#7,#8,#10,#11……求指教

P1941 [NOIP2014 提高组] 飞扬的小鸟

```cpp #include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> #define N 11000 #define M 2100 #define INF 199999999 using namespace std; int dp[N][M],x[N],y[N],sum[N]; int n,m,k; struct TI { int key; int l; int h; }tipe[N];//记录相应横坐标时的管子情况 int cal(int s,int now_x)//向上取整 { if(s==0) return 1; else if(s%x[now_x]==0) return s/x[now_x]; else return s/x[now_x]+1; } int main() { //freopen("bird.in","r",stdin); //freopen("bird.out","w",stdout); ios::sync_with_stdio(0); cin>>n>>m>>k; for(int i=0;i<=n;i++) for(int j=0;j<=m;j++) dp[i][j]=INF; for(int i=0;i<=n;i++) tipe[i].key=0; for(int j=1;j<=m;j++)//初始化 dp[0][j]=0; for(int i=0;i<=n-1;i++) cin>>x[i]>>y[i]; for(int i=1;i<=k;i++) { int x,l,h; cin>>x>>l>>h; tipe[x].l=l; tipe[x].h=h; tipe[x].key=1;//标记此处有管子 } for(int i=1;i<=n;i++)//记录当横坐标i为止的管子个数 if(tipe[i].key) sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(tipe[i].key && (j>=tipe[i].h||j<=tipe[i].l) )//如果此处有管子,跳过 continue; if(j==m)//特判 { for(int t=1;t<=m;t++) dp[i][j]=min(dp[i][j],dp[i-1][t]+cal(m-t,i-1)); continue; } if(j-x[i-1]>0)//上升 { dp[i][j] = min(dp[i][j],dp[i][j-x[i-1]]+1); dp[i][j] = min(dp[i][j],dp[i-1][j-x[i-1]]+1); } } for(int j=1;j<=m;j++) { if(tipe[i].key && (j>=tipe[i].h||j<=tipe[i].l) )//如果此处有管子,跳过 continue; if(j+y[i-1]<=m )//下降 dp[i][j]=min(dp[i][j],dp[i-1][j+y[i-1]]); } } int ans=INF; for(int j=1;j<=m;j++) ans=min(ans,dp[n][j]);//找到最后一列中的最小点击次数 if(ans==INF)//表示无法到达最后一列 { int ans1=0; for(int i=0;i<=n;i++) for(int j=1;j<=m;j++) if( dp[i][j] != INF )//找到所能达到的最大列 的管子数 ans1=sum[i]; cout<<0<<endl; cout<<ans1; } else cout<<1<<endl<<ans; return 0; } ``` @[保登心爱](/space/show?uid=27115) 可是我改成这样之后为啥还多WA了一个点-_-
by 可比百分 @ 2018-11-04 11:38:42


@[可比百分](/space/show?uid=61802) dp[i][j] = min(dp[i][j],dp[i][j-x[i-1]]+1) 中的 dp[i][j−x[i−1]] 可能因为j−x[i−1]这个高度在管子内部而被跳过计算
by Hono @ 2018-11-04 11:46:18


感觉我应该写篇题解= =
by Hono @ 2018-11-04 11:46:41


@[保登心爱](/space/show?uid=27115) 嗯嗯,我改了之后就对了,谢谢
by 可比百分 @ 2018-11-04 12:11:50


上一页 |