您的位置:首页 > 其它

hdu 1025 && hdu 1058

2016-07-29 11:14 429 查看
hdu 1025 

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dp[500005], s[500005], len, Case=0;
int search(int a, int b, int c)
{
int mid;
while(a<=b)
{
mid = (a + b) / 2;
if(dp[mid]==c)
return mid;
else
{
if(dp[mid]<c)
a = mid + 1;
else
b = mid - 1;
}
}
return a;
}

int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int p, r, i;
for(i=1; i<=n; i++)
{
scanf("%d%d",&p,&r);
s[p] = r;
dp[i] = 500005;
}
len = 1;
dp[1] = s[1];
for(i=2; i<=n; i++)
{
if(s[i] > dp[len])
dp[++len] = s[i];
else
{
int k = search(1,len,s[i]);
dp[k] = s[i]<dp[k]?s[i]:dp[k];
}
}
if(len==1)
printf("Case %d:\nMy king, at most %d road can be built.\n\n",++Case,len);
else
printf("Case %d:\nMy king, at most %d roads can be built.\n\n",++Case,len);
}
}
hdu 1058
#include<stdio.h>
#include<string.h>
int n, dp[5900];
int i, j, k, l;
int min(int a,int b,int c,int d)
{
int m=a;
if(b<m) m=b;
if(c<m) m=c;
if(d<m) m=d;

if(a==m) i++;
if(b==m) j++;
if(c==m) k++;
if(d==m) l++;

return m;
}

int main()
{
i=j=k=l=1;
dp[1] = 1;
for(int t=2; t<=5842; t++)
{
dp[t] = min(2*dp[i],3*dp[j],5*dp[k],7*dp[l]);
}
while(scanf("%d",&n)!=EOF)
{
if(n==0)
break;
else
{
if(n%10==1&&n%100!=11)
printf("The %dst humble number is %d.\n",n,dp[n]);
else if(n%10==2&&n%100!=12)
printf("The %dnd humble number is %d.\n",n,dp[n]);
else if(n%10==3&&n%100!=13)
printf("The %drd humble number is %d.\n",n,dp[n]);
else
printf("The %dth humble number is %d.\n",n,dp[n]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: