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

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

~~沙发~~
by 单身贵族1123 @ 2018-11-03 16:34:11


同问
by 单身贵族1123 @ 2018-11-03 16:34:27


@[可比百分](/space/show?uid=61802) 解决了记得告诉我
by 单身贵族1123 @ 2018-11-03 16:34:55


```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); } 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; } ``` 这是加了注释的……
by 可比百分 @ 2018-11-03 16:41:31


tipe.... 您到底是要写tube还是pipe....
by Hono @ 2018-11-03 16:45:24


@[可比百分](/space/show?uid=61802) 上升和下降分开写 您的写法似乎可能先下降在上升
by Hono @ 2018-11-03 16:50:43


@[保登心爱](/space/show?uid=27115) …………错了错了…… 我居然记错了(手动滑稽)
by 可比百分 @ 2018-11-03 16:51:24


@[保登心爱](/space/show?uid=27115) 但是我下降部分,是由上一列 i-1列转移的,而i-1列的状态值不是已经推完了吗,应该不会有影响吧
by 可比百分 @ 2018-11-03 16:54:59


@[可比百分](/space/show?uid=61802) 但是你的上升部分dp[i][j] = min(dp[i][j],dp[i][j-x[i-1]]+1)中的dp[i][j-x[i-1]]可能已经下降过了
by Hono @ 2018-11-03 17:31:43


@[保登心爱](/space/show?uid=27115) 哦哦,我知道怎么回事了,十分感谢
by 可比百分 @ 2018-11-03 22:40:02


| 下一页