zoukankan      html  css  js  c++  java
  • P6103 [EER2]直接自然溢出啥事没有

    第一眼直接按规则 DP,令 (0,1,2,3,4) 分别表示程序片段、语句、语句块、函数、值。

    但测出来会发现算重了。

    原因是通过两条不同的路径产生了贡献:

    [ exttt{NULL(0)} o exttt{{}(2)} o exttt{[]{}(3)} o exttt{([]{})(3)} o exttt{([]{})(4)} o exttt{([]{});(1)} o exttt{([]{});(0)} ]

    [ exttt{NULL(0)} o exttt{{}(2)} o exttt{[]{}(3)} o exttt{[]{}(4)} o exttt{([]{})(4)} o exttt{([]{});(1)} o exttt{([]{});(0)} ]

    发现问题仅仅出现函数转移到值的情况,强制这一步不能加小括号。

    这种题要难可以更难,不过就没有意思了是不是(也许你可以写个程序帮你推不会算重的状态转移方程?)

    code:

    #include<bits/stdc++.h>
    using namespace std;
    typedef unsigned long long ull;
    #define For(i,x,y)for(i=x;i<=(y);i++)
    ull f[10005][5];
    int main()
    {
    	int n,i,j;
    	f[0][0]=f[1][1]=f[1][0]=1;
    	cin>>n;
    	For(i,2,n)
    	{
    		f[i][2]=f[i-2][0];
    		//规则 2 
    		f[i][1]=f[i][2];
    		if(i>=4)f[i][3]=f[i-4][2];
    		f[i][3]+=f[i-2][2];
    		//规则 3 
    		f[i][3]+=f[i-2][3];
    		f[i][4]=f[i][3]/*+f[i-2][3]*/;
    		//规则 4 
    		f[i][4]+=f[i-2][4];
    		f[i][1]+=f[i-1][4];
    		//规则 5 
    		For(j,0,i)f[i][0]+=f[j][0]*f[i-j][1];
    		//规则 1 
    	}
    	cout<<f[n][0];
    	return 0;
    }
    //0 程序片段
      1 语句
      2 语句块
      3 函数
      4 值 
    
  • 相关阅读:
    返回一个整数数组中最大子数组的和
    软件工程概论第五周学习进度
    软件工程概论第四周学习进度
    软件工程个人作业03
    软件工程概论第三周学习进度
    软件工程个人作业02
    软件工程概论学习进度第二周
    寻找水王
    第七周学习进度
    二维数组最大值
  • 原文地址:https://www.cnblogs.com/May-2nd/p/14856766.html
Copyright © 2011-2022 走看看