hdu 1220 Cube(组合) + 2069 Coin Change(背包) + 2074 叠筐

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41117236/article/details/82834147

【题目】

hdu 1220 Cube

【题意】

给定一个立方体的边长n,输出有多少对单位立方体有不超过两个公共点。

【思路】

总共有n*n*n个单位立方体,有(n*n*n)*(n*n*n-1)/2对单位立方体。单位立方体之间可能情况有0,1,2,4个公共点,我们只需要减去4个公共点的单位立方体对即可。拥有4个公共点的两个单位立方体,我们从一个面入手,一列有n-1对,一个面有n*n列,即一个面有(n-1)*n*n对,三个面就是3*(n-1)*n*n。

【代码】

main()
{
    int n;
    while(~scanf("%d",&n))
    {
        int ans=n*n*n*(n*n*n-1)/2-3*(n-1)*n*n;
        printf("%d\n",ans);
    }
}

【题目】

hdu 2069 Coin Change

【题意】

给定数额n,硬币面额有1,5,10,25,50,输出总共有多少种硬币兑换数额n的方法,硬币数不超过100。

【思路】

背包。

【代码】

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define mem(a) memset(a,0,sizeof(a))
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int maxn=10000;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
int pre[1005];
int find(int x){return x==pre[x]?x:pre[x]=find(pre[x]);}
int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
main()
{
    int n,dp[105][255];
    int money[5]={1,5,10,25,50};
    while(~scanf("%d",&n))
    {
        mem(dp); dp[0][0]=1;
        go(i,0,4)
           go(j,1,100)
              for(int k=n;k>=money[i];k--)
                  dp[j][k]+=dp[j-1][k-money[i]];
        int ans=0;
        go(i,0,100) ans+=dp[i][n];
        printf("%d\n",ans);
    }
}

【题目】

hdu 2074 叠筐

【题意】

给定图案大小和字符a,b,保证字符a在中心位置,两字符相互包围形成图案并输出。

【思路】

字符串的规律题没什么难的,每次看到都很开心。

【代码】

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <stack>
#include <queue>
#include <algorithm>
#include <iostream>
#define mem(a) memset(a,0,sizeof(a))
#define go(i,a,b) for(int i=a;i<=b;i++)
#define og(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
const int maxn=10000;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef unsigned long long ull;
int pre[1005];
int find(int x){return x==pre[x]?x:pre[x]=find(pre[x]);}
main()
{
    int n,c=0;
    char s[82][82],a,b;
    while(~scanf("%d %c %c",&n,&a,&b))
    {
        if(c) puts("");
        c++;
        if(n==1)
        {
            printf("%c\n",a);
            continue;
        }
        int k=n/2+1; 
        memset(s,a,sizeof(s));
        go(i,1,n-k)
        {
            if(i%2)
            {
                go(j,k-i,k+i)
                {
                   s[k-i][j]=b;
                   s[k+i][j]=b;
                   s[j][k-i]=b;
                   s[j][k+i]=b;
                }
            }
        }
        go(i,1,n)
        {
            if(i==1||i==n)
            {
                printf(" ");
                go(j,2,n-1) printf("%c",s[i][j]);
                printf(" ");
            }
            else go(j,1,n) printf("%c",s[i][j]);
            puts("");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_41117236/article/details/82834147