3997: [TJOI2015]组合数学
2018-02-05 16:40
381 查看
题目链接
题目大意:给定一个网格图,每次从左上角出发,只能往右或往下走,最后到达右下角,每个格子有最低经过次数,问最少走几次
题解:Dilworth定理:最小链覆盖数 = 最长反链长度
其对偶定理:最长链长度 = 最小反链覆盖数
本题求带权最小链覆盖
等价求带权最长反链,平面图只需要dp
我的收获:玄学分析
题目大意:给定一个网格图,每次从左上角出发,只能往右或往下走,最后到达右下角,每个格子有最低经过次数,问最少走几次
题解:Dilworth定理:最小链覆盖数 = 最长反链长度
其对偶定理:最长链长度 = 最小反链覆盖数
本题求带权最小链覆盖
等价求带权最长反链,平面图只需要dp
我的收获:玄学分析
#include<set> #include<map> #include<ctime> #include<queue> #include<cmath> #include<cstdio> #include<vector> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define ll long long using namespace std; int read() { int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int T,n,m; int a[1005][1005]; ll f[1005][1005]; int main() { T=read(); while(T--) { n=read();m=read(); for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=read(); for(int i=1;i<=n;i++) for(int j=m;j;j--) f[i][j]=max(f[i-1][j+1]+a[i][j],max(f[i-1][j],f[i][j+1])); printf("%lld\n",f [1]); } return 0; }
相关文章推荐
- bzoj3997 [TJOI2015]组合数学 dp+Dilworth定理
- bzoj 3997: [TJOI2015]组合数学
- [BZOJ3997]TJOI2015组合数学|DP
- 3997: [TJOI2015]组合数学 DP Dilworth定理
- BZOJ 3997 TJOI2015 组合数学 Dilworth定理
- bzoj 3997: [TJOI2015]组合数学 dp
- BZOJ 3997 [TJOI2015]组合数学(单调DP)
- BZOJ 3997 [TJOI2015]组合数学
- 【BZOJ3997】【TJOI2015】组合数学 Dilworth定理 DP
- BZOJ 3997: [TJOI2015]组合数学
- 【BZOJ 3997】 3997: [TJOI2015]组合数学 (DP| 最小链覆盖=最大点独立集)
- 【bzoj3997】[TJOI2015]组合数学
- 【bzoj3997】[TJOI2015]组合数学
- 【bzoj3997】[TJOI2015]组合数学 dp
- BZOJ 3997 TJOI2015 组合数学
- 【bzoj3997】[TJOI2015]组合数学 Dilworth定理结论题+dp
- bzoj3997[TJOI2015]组合数学
- BZOJ 3997: [TJOI2015]组合数学 [偏序关系 DP]
- BZOJ 3997: [TJOI2015]组合数学
- 【BZOJ3997】[TJOI2015]组合数学 最长反链