zoukankan      html  css  js  c++  java
  • CF413C k-Tree DP

    问题描述

    CF413C

    LG-CF413C


    题解

    求有多少权值为 (n) ,路径中有边权不小于 (d) 的 → 所有权值为 (n) 的路径总数-所有边权均小于 (d)

    (f(i)) 代表权值为 (i) 的路径总数 , (f(x)=sumlimits_{i=x-k}^{x-1}{f(i)})

    (g(i)) 代表权值为 (i) ,且路径中边权均小于 (d)(g(x)=sumlimits_{i=x-d+1}^{x-1}{g(i)})

    答案为 (f(n)-g(n))


    (mathrm{Code})

    #include<bits/stdc++.h>
    using namespace std;
    
    #define int long long
    
    template <typename Tp>
    void read(Tp &x){
    	x=0;char ch=1;int fh=1;
    	while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
    	if(ch=='-') fh=-1,ch=getchar();
    	while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    	x*=fh;
    }
    
    const int maxn=107;
    const int mod=1000000007;
    
    int f[maxn],g[maxn];
    int n,d,k;
    
    void Init(void){
    	read(n);read(k);read(d);
    }
    
    void Work(void){
    	f[0]=g[0]=1ll;
    	for(int i=1;i<=n;i++){
    		int st=max(0ll,i-k);
    		for(int j=st;j<i;j++) f[i]=(f[i]+f[j])%mod;
    		st=max(0ll,i-d+1);
    		for(int j=st;j<i;j++) g[i]=(g[i]+g[j])%mod;
    	}
    	printf("%lld
    ",((f[n]-g[n])%mod+mod)%mod);
    }
    
    signed main(){
    	Init();
    	Work();
    	return 0;
    }
    
  • 相关阅读:
    1161-飞弹
    1160-繁杂的道路
    JS实现刷新iframe的方法
    ifame 跨域高度自适应
    Asp.net弹出层并且有遮罩层
    Regex.Match 方法
    查询404文件
    JS中showModalDialog 详细使用
    对frameset、frame、iframe的js操作
    HTML & XML 转义字符
  • 原文地址:https://www.cnblogs.com/liubainian/p/12269426.html
Copyright © 2011-2022 走看看