UVA11401-Triangle Counting-递推

给出一个数字n,计算从1到n能组成几个不同的三角形。

n的范围是10^6,大概就是递推吧。从F[i-1]到F[i]可以线性求出。要注意结果超出int。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

long long dp[1000100];
int N;

int main()
{
    dp[3] = 0;
    dp[4] = 1;
    dp[5] = 3;

    for(int i=6;i<1000010;i++)
    {
        long long k = i-3;
        if(k&1)
            dp[i] = dp[i-1]+(k+1)*(k+1)/4;
        else
            dp[i] = dp[i-1]+ k*(k+2)/4;
    }

    while(~scanf("%d",&N) && N>=3)
    {
        printf("%lld\n",dp[N]);
    }
}
时间: 2024-12-26 05:31:19

UVA11401-Triangle Counting-递推的相关文章

uva 1485 - Permutation Counting(递推)

题目链接:uva 1485 - Permutation Counting 题目大意:给定n和k,要求求一个由1~n组成的序列,要求满足ai>i的i刚好有k个的序列种数. 解题思路:dp[j][i]表示长度为i,j个位置满足的情况. dp[j+1][i]+=dp[j][i]?(j+1); 1, (3), (4), 2: 括号位置代表ai>i,既满足位置,此时i = 4, j = 2. -> 1, (3), (4), 2, 5 1 种,在最后追加 -> 1, (5), (4), 2,

uva11401 Triangle Counting

题目大意: 给出1~n的数, 求出能组合成三角形的三个数有多少组, 每组内的数都要不一样. /* 设x是最大的边, 其余的为y,z; 根据三角形性质有: x>y+z 和 x-y < z < x; 解有: 0+1+2+3+...+(x-2) = (x-1)*(x-2)/2; 但是结果里面有y == z的情况和每个三角形算了两次. 即: 最大边长为x的三角形有: ( (x-1)*(x-2)/2 - (x-1) + x/2 ) / 2; 最终结果: f[i] = f[i-1] + 最大边长为i

UVA - 11401 - Triangle Counting (递推!)

UVA - 11401 Triangle Counting Time Limit: 1000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Submit Status Description Problem G Triangle Counting Input: Standard Input Output: Standard Output You are given n rods of length 1, 2-, n. You have

hdu 1396 Counting Triangles (递推)

Counting Triangles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 2012    Accepted Submission(s): 966 Problem Description Given an equilateral triangle with n the length of its side, program to

POJ-1163-The Triangle: DP入门 递归 递推

递归思路 超时算法 #include<iostream> using namespace std; #define Size 101 int Triangle[Size][Size]; int n; int GetAns( int i, int j ) { if( i==n ) return Triangle[i][j]; int x=GetAns( i+1, j ); int y=GetAns( i+1, j+1 ); return max(x, y)+Triangle[i][j]; } i

【计数】【UVA11401】 Triangle Counting

传送门 Description 把1……n这n个数中任取3个数,求能组成一个三角形的方案个数 Input 多组数据,对于每组数据,包括: 一行一个数i,代表前i个数. 输入结束标识为i<3. Output 对于每组数据,输出: 对应的方案个数 Sample Input 5 8 0 Sample Output 3 22 Hint n≤1e6. 三个数字x,y,z能组成三角形当且仅当对于任意顺序,都满足x+y>z. Solution 考虑把所有能组成的三角形按照最长边分类.因为三边长度互不相同,所

UVA 11401 - Triangle Counting(数论+计数问题)

题目链接:11401 - Triangle Counting 题意:有1,2,3....n的边,求最多能组成的三角形个数. 思路:利用三角形不等式,设最大边为x,那么y + z > x 得 x - y < z < x 然后y取取值,可以从1取到x - 1,y为n时候,有n - 1个解,那么总和为0 + 1 + 2 +...+ (x - 2) = (x - 1) * ( x- 2) / 2; 然后扣除掉重复的y = z的情况,在y > x / 2时,每个y取值会出现一次y = z.

UVA Triangle Counting 11401【几何+数学】

11401 - Triangle Counting Time limit: 1.000 seconds 题意:给你n个线段,长度1-n.问可以组成多少不同的三角形 解题思路: 设最大边长为x的三角形有C(x)个,另外两条边长分别为y和z,根据三角不等式有y+z>x.所以z的范围是x-y < z < x. ①根据这个不等式,当y=1时x-1 < z < x,无解:y=2时有一个解(z=x-1):y=3时有两个解(z=x-1或者z=x-2)--直到y=x-1时有x-2个解.根据等

uva 11401 - Triangle Counting(数论)

题目链接:uva 11401 - Triangle Counting 题目大意:有多少种方法可以从1,2,3...n中选出3个不同的数组成三角形,给出n,求种数. 解题思路:加法原理,设最大边为x的三角形有c(x)个,那么另外两条边长分别为y和z,根据三角形的形式可以的y+z>x,所以z的范围即为x?y<z<x 根据这个不等式可以得到每个y值所对应的z值个数,为等差数列,所以 c(x)=(x?1)?(x?2)2??x?12?2 然后根据递推:f(n)=∑i=1nc(i) 代码 #incl

poj1163 - DP递推、递归写法

本题超链接:http://poj.org/problem?id=1163 The Triangle Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 50977   Accepted: 30888 Description 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5(Figure 1) Figure 1 shows a number triangle. Write a program that calculat