我的创作纪念日

作者回忆了自己如何偶然发现并开始使用CSDN社区,从初学者到开始写博客分享代码和解题思路的过程。文章中提到的一个重点是通过写博客来加深对编程问题的理解,尤其是动态规划的代码实现。作者强调了自我学习和不断进步的重要性。
摘要由CSDN通过智能技术生成

机缘

  1. 一开始我还是个懵懂无知的蒟蒻的时候,什么工具、网站都不知道,也不会用。这个伟大的CSDN专业开发者社区还是无意间听别人说的。听到之后立马来试了一下,发现挺好用。
  2. 起初用这个网站还是走了些许弯路的,比如直接抄代码啊什么的,甚至还特地注册了一个账号,就为了直接复制代码。但是,干坏事总是会被发现的,洛谷号差点被
  3. 后来就想:为什么不用来做点有意义的事呢?于是,我的第一篇博客诞生了……

收获

好吧,这个我承认我博客一般都是给自己写的,也没什么人看。

但是呢,这个博客如果我自己看也算的话,阅读量估计要破千了吧。


日常

创作其实已经成为我生活中的一部分了,每天回到家总要看一下我的阅读量(虽然没什么结果)

每次只要有一篇比较难的代码,我必会发一篇博客来讲。这是给别人讲,也是日后给我自己来讲。


成就

我还记得之前写过一篇超级多注释的代码,注释比代码还多。

那时一写注释就停不下来,写了一个多小时,可惜现在那篇代码不知道哪去了,就给大家欣赏一篇刚入门没多久的动态规划代码吧。

/*
思路:
因为两个人不互相干扰
看了一下数据范围
直接记下了每一轮的状态
即dp[i][j]表示第i轮有j分数有多少
最后比较一下

优化: 
1.用了3个前缀和
2.每次+MID可以防止出现负数

这题怕出错,全套上long long了,可能空间有点大
时间复杂度不大也不小,好像O(t的平方)吧 不太会算 
*/
#include<bits/stdc++.h>
using namespace std;

const long long MID=1000;

const long long MOD=1e9+7;

const long long N=1007;
 
long long dp1[105][N];

long long dp2[105][N];
 
long long l[N];

long long r[N];
 
int main(){
    int a,b,k,t;
    scanf("%d%d%d%d",&a,&b,&k,&t);
    dp1[0][MID+a]=1;
    for(long long i=1;i<=t;i++){
        long long u=a%MOD+k%MOD*i%MOD+MID%MOD;
        long long d=a%MOD-k%MOD*i%MOD+MID%MOD;
        for(long long j=d%MOD;j<=u%MOD;j++)l[j]=(dp1[i-1][j]%MOD+l[j-1]%MOD-dp1[i-1][j-k-1]%MOD)%MOD;
        for(long long j=u%MOD;j>=d%MOD;j--)r[j]=(dp1[i-1][j]%MOD+r[j+1]%MOD-dp1[i-1][j+k+1]%MOD)%MOD;
        for(long long j=d%MOD;j<=u%MOD;j++)dp1[i][j]=(l[j]%MOD+r[j]%MOD-dp1[i-1][j]%MOD)%MOD;
    }
    memset(l,0,sizeof(l));
    memset(r,0,sizeof(r));
    dp2[0][MID+b]=1;
    for(long long i=1;i<=t%MOD;i++){
        long long u=b%MOD+k%MOD*i%MOD+MID%MOD;
        long long d=b%MOD-k%MOD*i%MOD+MID%MOD;
        for(long long j=d%MOD;j<=u%MOD;j++)l[j]=(dp2[i-1][j]%MOD+l[j-1]%MOD-dp2[i-1][j-k-1]%MOD)%MOD;
        for(long long j=u%MOD;j>=d%MOD;j--)r[j]=(dp2[i-1][j]%MOD+r[j+1]%MOD-dp2[i-1][j+k+1]%MOD)%MOD;
        for(long long j=d%MOD;j<=u%MOD;j++)dp2[i][j]=(l[j]%MOD+r[j]%MOD-dp2[i-1][j]%MOD)%MOD;
    }
    long long sum=0;
    long long ans=0;
    long long u=a%MOD+k%MOD*t%MOD+MID%MOD;
    long long d=b%MOD-k%MOD*t%MOD+MID%MOD;
    for(long long i=d%MOD;i<=u%MOD;i++){
        ans=(ans%MOD+dp1[t][i]%MOD*sum%MOD)%MOD;
        sum=(sum%MOD+dp2[t][i]%MOD)%MOD;
    }
    ans=(ans%MOD+MOD)%MOD;
    printf("%lld\n",ans);
    return 0;
}

是不是感觉很烂?

那时候取模都是一个个手动加的,long long也是一个个手动写的。

当时这篇代码好像还改了好久(一直RE),大概改了一两个小时吧。

这也算我比较喜欢的一篇代码吧,比较暴力但是能过。 


憧憬

我没什么憧憬,做好自己即可。

但我特别喜欢一句话:

人往前走,苦才会后退啊。

加油!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值