Good Bye 2017 D. New Year and Arbitrary Arrangement

本文介绍了一个使用动态规划解决带有概率计算的问题。通过定义状态dp[i][j]为当前有i个a字符和j个ab子序列的情况,推导出了状态转移方程。特别地,当i+j大于等于特定阈值k时,采用了几何分布进行计算。

看了别人的题解
首先这题是一个dp

dp[i][j] i是当前有多少个a j是当前有多少个ab子序列

dp[i][j] = dp[i+1][j]*Pa + dp[i][i+j]*Pb;
i,j 时加一个a之后会变成i+1, j
i,j 时加一个b之后会变成i, i+j

除此之外的话对于i+j >= k的情况
其实是一个几何分布来概括,此时
dp[i][j] = i+j + 1/p - 1

#include<iostream>
#include<map>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<set>
#include<vector>
#include<queue>
#include<cmath>
#include<stack>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = 1e3+5;
const int MOD = 1e9+7;
#define MS(x,y) memset(x,y,sizeof(x))
#define MP(x, y) make_pair(x, y)
const int INF = 0x3f3f3f3f;

ll dp[N][N];

ll inv(ll a) {
    ll ans = 1; int tim = MOD-2; 
    while(tim)  {
        if(tim & 1) ans = ans*a % MOD;
        a = a*a % MOD;
        tim >>= 1;
    }
    return ans;
}


int main() {
    int k; ll a, b;
    while(~scanf("%d %lld %lld", &k, &a, &b)) {
        memset(dp, 0, sizeof(dp));
        ll all = a+b;

        a = a*inv(all) %MOD;
        b = b*inv(all) %MOD;
        ll tt = a*inv(b) % MOD;

        for(int i = k; i >= 0; --i) {
            for(int j = k; j >= 0; --j) {
                if(i + j >= k) {
                    dp[i][j] = (i + j + tt) % MOD;
                } else {
                    dp[i][j] = (dp[i + 1][j]*a + dp[i][i + j]*b) % MOD;
                }
            }
        }

        printf("%lld\n", dp[1][0]);
    }
    return 0;
}
### AKConv 卷积核概述 AKConv 是一种新型的卷积核设计方法,旨在通过支持任意采样形状和参数数量来提升模型的表现力和灵活性。这种方法突破了传统卷积操作对于固定形状和规则网格结构的限制,允许更灵活地定义卷积核的行为。 #### 1. **任意采样形状** 传统的卷积神经网络 (CNNs) 中使用的卷积核通常基于固定的矩形或方形窗口进行计算。然而,在实际应用中,图像或其他数据可能包含复杂的几何模式,这些模式无法被简单的正则化卷积捕捉到。AKConv 提出了可以通过自定义的方式设定卷积核的采样区域[^4],从而适应不同的输入特征分布情况。 #### 2. **任意参数数量** 除了能够调整采样的形态外,AKConv 还提供了控制所需学习参数总数的能力。这意味着开发者可以根据具体任务需求平衡精度与效率之间的关系。例如,在资源受限环境下运行的小型设备上部署深度学习模型时尤为重要。 #### 3. **定义初始采样位置** 为了实现上述目标之一即创建具有特定形式的空间布局点集作为滤波器作用范围内的像素坐标集合, 需要先确定一组基础参考点用于后续变换过程中的定位依据 。这部分工作涉及到如何科学合理的选择原始候选节点以及制定相应的转换策略使得最终得到的结果既满足理论上的完备性同时也具备良好的实践效果 . #### 4. **实施细节** 在技术层面实现这样一个高度可配置化的解决方案并非易事 , 它至少包括以下几个方面 : - 开发专用算法用来动态生成符合预期规格要求的新类型过滤单元 ; - 设计高效的训练机制确保整个系统能够在保持较高收敛速度的同时达到满意的泛化能力水平; 下面给出一段伪代码展示了一个简化版本的 AKConv 实现思路: ```python class AKConv(nn.Module): def __init__(self, in_channels, out_channels, num_params=8, sample_shape='custom'): super(AKConv, self).__init__() # Initialize parameters based on the number specified by 'num_params' self.weights = nn.Parameter(torch.randn(out_channels, in_channels, num_params)) # Define sampling positions according to given shape ('sample_shape') if sample_shape == 'custom': self.sample_positions = generate_custom_sample_positions() def forward(self, x): result = [] for i in range(len(x)): sampled_x = interpolate_at_positions(x[i], self.sample_positions) convolved_feature = torch.matmul(sampled_x, self.weights) result.append(convolved_feature) return torch.stack(result) def generate_custom_sample_positions(): """Generate custom sampling locations.""" pass def interpolate_at_positions(input_tensor, positions): """Interpolate values at specific spatial coordinates.""" pass ``` 此段代码仅作示意用途,并未完全体现所有功能特性及其内部运作原理。 #### 5. **使用场景** 由于其独特的特性和优势,Akconv 可广泛应用于多个领域如计算机视觉(CV),自然语言处理(NLP)等领域当中解决那些难以用标准工具有效应对的问题实例. ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值