uva 11401 Triangle Counting 数三角形 (计数问题)
2015-08-29 16:09
281 查看
题目链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2396
数三条边各不相同,而且满足三边关系。
先确定最大的边。
令最大边为x时,答案有dp[x]种,那么输入x的答案ans[x]=ans[x-1]+dp[x];
所以可以预处理。
不同于其它题,当输入的n<3时结束,(被坑了)。
看了训练指南上的解答,对于我这种方法,先去定一些数值,(不论形式如何,其实质过程都是如此)然后继续分析,我的方法在计数的同时直接考虑了大小的限制关系(不重复计算)
作为计数方法一种,也可以先计算一遍(包含重复的),再去重。
定了一条边之后,对另外两个边不考虑不能相等,算出所有种数,然后再减去两边相等的情况,之后再除以全排列
A(2,2),得解;(题目实质是求一种组合)
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2396
数三条边各不相同,而且满足三边关系。
先确定最大的边。
令最大边为x时,答案有dp[x]种,那么输入x的答案ans[x]=ans[x-1]+dp[x];
所以可以预处理。
不同于其它题,当输入的n<3时结束,(被坑了)。
#include<cstdio> #include<string> #include<cstring> #include<iostream> #include<cmath> #include<algorithm> #include<climits> #include<queue> #include<vector> #include<map> #include<sstream> #include<set> #include<stack> #include<utility> #pragma comment(linker, "/STACK:102400000,102400000") #define PI 3.1415926535897932384626 #define eps 1e-10 #define sqr(x) ((x)*(x)) #define FOR0(i,n) for(int i=0 ;i<(n) ;i++) #define FOR1(i,n) for(int i=1 ;i<=(n) ;i++) #define FORD(i,n) for(int i=(n) ;i>=0 ;i--) #define lson num<<1,le,mid #define rson num<<1|1,mid+1,ri #define MID int mid=(le+ri)>>1 #define zero(x)((x>0? x:-x)<1e-15) #define mk make_pair #define _f first #define _s second using namespace std; const int INF =0x3f3f3f3f; const int maxn= 1000000+10 ; //const int maxm= ; //const int INF= ; typedef long long ll; //const ll inf =1000000000000000;//1e15; //ifstream fin("input.txt"); //ofstream fout("output.txt"); //fin.close(); //fout.close(); //freopen("a.in","r",stdin); //freopen("a.out","w",stdout); //by yskysker123 ll n,tmp; ll ans[maxn]; int main() { ans[3]=0; for(ll x=4;x<=1000000;x++) { if(x%2==0) tmp= (x-2)*( (x-4)/2+1 )/2; else tmp= (x-1)*((x-5)/2 +1)/2; ans[x]=ans[x-1]+tmp; } while(~scanf("%lld",&n)&&n>=3) { printf("%lld\n",ans ); } return 0; }
看了训练指南上的解答,对于我这种方法,先去定一些数值,(不论形式如何,其实质过程都是如此)然后继续分析,我的方法在计数的同时直接考虑了大小的限制关系(不重复计算)
作为计数方法一种,也可以先计算一遍(包含重复的),再去重。
定了一条边之后,对另外两个边不考虑不能相等,算出所有种数,然后再减去两边相等的情况,之后再除以全排列
A(2,2),得解;(题目实质是求一种组合)
相关文章推荐
- LeetCode(257) Binary Tree Paths
- 字符设备控制
- 利用jquery完成表单域的收集,利用ajax实现信息传递给服务器存储
- xxx-servlet.xml vs applicationContext.xml
- CF 316 E. Pig and Palindromes 求左上角走到右下角是回文的方法数 DP
- 常用SQL语句3(MSSQL)
- UI 18 单例
- PID_MAX_DEFAULT
- github提交可能遇到的问题
- 斐波那契数列
- 【POJ3164】【有向图的最小生成树】【自己的模板】
- Twitter Storm如何保证消息不丢失
- VS调试技巧
- C#练习题 if
- phpMyAdmin的用户名和密码丢了怎么办?
- ios中创建可以拖动的view原理和实现详解(含代码)
- typedef和define的用法和区别
- URAL 1017 Staircases dp练习
- 通过字节流的方式将图片上传服务器
- systick介绍