程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu 5365+hdu 5355

hdu 5365+hdu 5355

編輯:關於C++

 

題目大意:給定一些整數點,問這些點能夠組成多少個正三角形或者是正方形、正五邊形、正六邊形。

思路:如果仔細想一想的話,這道題目是根本不存在正三角形、正五邊形、正六邊形的請款的。(在紙上畫圖看一看,可以發現確實不行。題目輸入是整數點)

所以題目變成:這些點能夠組成多少個正方形。看數據范圍,n<=20,坐標范圍<=8。

題目瞬間簡單了,暴力!暴力枚舉4個點,然後判斷這4個點是否能組成一個正方形。判斷是否為正方形的方法很多,向量或者是距離。

我這裡用的是算出4個點的距離,還有2個對角線的距離。如果能組成正方形,條件是:4條邊長度相同,2條對角線長度相同。

 

#include
#include
#include
#include
#include
using namespace std;
struct node{
	int x,y;
}p[22];
bool cmp(node a,node b){
	if(a.x==b.x)return a.y

 

5366

題目鏈接:點擊打開鏈接

題目大意:給一些位置,上面可以放木樁。放置條件是兩個木樁之間至少要有2個空格的距離。問放n個木樁的放法。

思路:這題可以考慮用dp解決。我們設dp[i][0],dp[i][1]分別為在第i 個位置上不放和放木樁。

考慮dp[i][1]的時候,其左側兩個空位不能放木樁,左側的第三個位置可放可不放。所以dp[i][1]=dp[i-3][1]+dp[i-3][0]+1。

考慮dp[i][0]的時候,其左側的的第一個空位可放可不放。所以dp[i][0]=dp[i-1][0]+dp[i-1][1]。

答案就是dp[i][1]+dp[i][0]。

 

#include
#include
#define LL __int64 
 LL dp[66][2];
int main()
{
	int n,i,j,k;
	dp[1][0]=1;
	dp[0][0]=0;
	dp[2][1]=1;
	dp[2][0]=1;
	dp[3][1]=1;
	dp[3][0]=2;
	for(i=4;i<=60;i++)
	{
		dp[i][1]=dp[i-3][1]+dp[i-3][0]+1;
		dp[i][0]=dp[i-1][1]+dp[i-1][0];
	}
	while(scanf(%d,&n)!=EOF)
	{
		printf(%I64d
,dp[n][0]+dp[n][1]);
	}
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved