雅礼集训 Day1 T2 折射
2018-10-23 16:54
113 查看
版权声明:版权声明:本文为博主原创文章,未经博主允许不得转载,欢迎添加友链。 https://blog.csdn.net/zzk_233/article/details/83309363
这是一道比较考研思维的题,如果按照y枚举,就需要判定两个界限,这有点麻烦(PS:当然zwz大佬写得出来也没什么题)。
而对于我这种蒟蒻就只能找其他方法了,我们按照y枚举,而这个图合法的情况就是一条不断向下延伸的折线,
所以设dp[i][0/1],表示这个点有一个向左或者向右的下一个点的情况。
有向左和向右两种情况,这个点向左可以通过另一个向右的转移过来,向右的同理。而最开始想左和向右都可以。
最后统计答案的时候要减1,因为都包含了只有这个点这个情况。
[code]#include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #define mode 1000000007 using namespace std; typedef long long ll; int n; struct no { int x,y; }ndd[6005]; int cmp(no a,no b) { return a.x<b.x; } ll dp[6005][3],ans; int main() { freopen("refract.in","r",stdin); freopen("refract.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&ndd[i].x,&ndd[i].y); } sort(ndd+1,ndd+1+n,cmp); dp[1][0]=dp[1][1]=1; for(int i=2;i<=n;i++) { dp[i][0]=dp[i][1]=1; for(int j=i-1;j>=1;j--) { if(ndd[i].y<ndd[j].y) { dp[j][1]+=dp[i][0]; dp[j][1]%=mode; }else { dp[i][0]+=dp[j][1]; dp[i][0]%=mode; } } } for(int i=1;i<=n;i++) (ans+=dp[i][0])%=mode,(ans+=dp[i][1]-1)%=mode; printf("%I64d",ans); return 0; }
阅读更多
相关文章推荐
- 「6月雅礼集训 2017 Day1」看无可看
- LibreOJ#6030. 「雅礼集训 2017 Day1」矩阵
- loj 6030「雅礼集训 2017 Day1」矩阵
- #6029. 【雅礼集训 2017 Day1】市场
- #6030. 【雅礼集训 2017 Day1】矩阵
- [后缀自动机][阈值] LOJ #6031. 「雅礼集训 2017 Day1」字符串
- noip 2018 雅礼模拟赛day1 T2
- #6029. 「雅礼集训 2017 Day1」市场--线段树区间更新
- [后缀自动机 阈值] LOJ#6031. 「雅礼集训 2017 Day1」字符串
- [线段树][简单复杂度分析]LOJ#6029. 「雅礼集训 2017 Day1」市场
- loj6030 「雅礼集训 2017 Day1」矩阵
- 雅礼集训 Day1 T3 画作
- loj6029 「雅礼集训 2017 Day1」市场
- 「6月雅礼集训 2017 Day1」说无可说
- 雅礼集训 Day2 T2 蔬菜
- 3728 联合权值[NOIP 2014 Day1 T2]
- 【LOJ 6041】「雅礼集训 2017 Day7」事情的相似度
- 雅礼集训 Day2 T3 联盟
- [NOIP2015]Day1 T2 信息传递
- [2017雅礼集训]day9 T2 价 最小割/最大权闭合子图