【洛谷】2020年1月18日刷题


一天做32道

P1004 方格取数(1)

在这里插入图片描述典型的DP问题,寻找上一个状态的最优结果

#include<iostream>
#include<algorithm>
using namespace std;

int n,m,map[11][11],f[11][11][11][11];
int q,w,e;
struct point
{
    int x,y,data;
}p[100];

int main()
{
    freopen("1.txt","r",stdin);
    freopen("2.txt","w",stdout);
    cin >> n;
    while(1)
    {
        cin >> q >> w >> e;
        if(q==0&&w==0&&e==0)break;
        p[++m].x = q;
        p[m].y = w;
        p[m].data = e;
    }
    for(int i = 1;i <= m;i++)
    {
        map[p[i].x][p[i].y] = p[i].data;

    }
    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= n;j++)
            for(int k = 1;k <= n;k++)
            {
                int l = i+j-k;
                if(l < 0)break;  //这一句是关键!
                f[i][j][k][l] = max(max(max(f[i-1][j][k-1][l],f[i-1][j][k][l-1]),f[i][j-1][k-1][l]),f[i][j-1][k][l-1]);
                if(i==k&&j==l)f[i][j][k][l]+=map[i][j];
                else
                {
                    f[i][j][k][l]+=(map[i][j]+map[k][l]);
                }
                
            }
        cout << f[n][n][n][n];
    
}

P1151 子数整数(2)

在这里插入图片描述
仔细仔细!!!

#include<iostream>
using namespace std;
int s1,s2,s3;
bool flag = 1;
int main()
{
    freopen("1.txt","r",stdin);
    freopen("2.txt","w",stdout);
    int k;cin >> k;
    for(int i = 10000;i <= 30000;i++)
    {
        s1 = i / 100;
        s3 = i % 1000;
        s2 = (i/10)%1000;
        if(s1%k==0&&s2%k==0&&s3%k==0)
            {
                cout << i <<endl;
                flag = 0;
            }
    }
    if(flag)
        cout << "NO" ;//实在没想到是因为No打成了NO,太粗心了
}
发布了337 篇原创文章 · 获赞 43 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/dghcs18/article/details/104026949