首页 > 其他分享 >ACM日常训练日记——7.29

ACM日常训练日记——7.29

时间:2024-07-30 19:17:00浏览次数:16  
标签:7.29 花瓶 int ll ACM 101 日记 dp define

  • Atcoder训练
    1. Enough Array
      高质量题,建议两个星期后重新去做,滑动窗口题,找连续子串的和大于k的数
      我一开始就直接想前缀和去做,但是没有考虑清楚连续的关系,只要到一个状态满足大于它的状态全部都满足
      然后关键的地方是每次找到以后,把最先进入的状态弹出,也就是说从1——k变成2——k的子串,滑动窗口。
      前缀和,加每个区间二分
#include <bits/stdc++.h>
#define Fst first
#define Snd second
#define MP make_pair
#define ll long long
#define PII pair<int,int>
#define PIL pair<int,ll>
#define PLI pair<ll,int>
#define PLL pair<ll,ll>
#define PDD pair<double,double>
using namespace std;
int n;
ll m;
ll a[100010],pre[100010];
int main()
{
    scanf("%d%lld",&n,&m);
    for (int i=0;i<n;i++) scanf("%lld",&a[i]),pre[i+1]=pre[i]+a[i];
    ll res=0;
    for (int i=0;i<n;i++)
    {
        int l=0,r=n-i;
        while (l<r)
        {
            int mid=(l+r)>>1;
            if (pre[i+mid]-pre[i]>=m) r=mid;
            else l=mid+1;
        }
        if (pre[i+l]-pre[i]>=m) res+=n-i-l+1;
    }
    printf("%lld\n",res); return 0;
}

滑动窗口

#include <bits/stdc++.h>

using namespace std;

using ll = long long;

int main() {
	ll n, K;
	cin >> n >> K;
	vector<ll> a(n);
	for (int i = 0; i < n; ++i) {
		cin >> a[i];
	}
	
	ll sum = 0;
	ll ans = 0;
	int left = 0;
	
	for (int i = 0; i < n; ++i) {
		sum += a[i];
		while (sum >= K) {
			ans += n - i; 
			sum -= a[left];
			left++;
		}
	}
	
	cout << ans << endl;
	return 0;
}

  • 动态规划专题
    1. 花店橱窗
      一开始我用dfs做,我觉得数据不大可以试试,但是超时了,只能去用dp去写
      看了别人代码才知道怎么转移,难点在于怎么从上一层转移到下一层,且不能重复走同一个m
动态规划的边界条件:在初始化动态规划表dp时,我们只初始化了前i种花放在前j个花瓶中的状态,
即dp[0][j] = 0,这表示没有花时的美观程度为0。随着循环的进行,我们逐步填充dp[i][j],
其中i表示当前考虑的花的编号,j表示当前考虑的花瓶的编号。

状态转移:在状态转移过程中,我们考虑的是当前第i种花可以放在第j个花瓶中,同时确保第i种花不会放在比它编号小的花瓶中。
这是因为我们在更新dp[i][j]时,总是从dp[i][j-1]开始,即第i种花不放在第j个花瓶中,
然后检查是否将第i种花放在第j个花瓶中比放在第j-1个花瓶中更好(即dp[i-1][j-1] + mp[i][j]是否大于dp[i][j-1])。
这样,我们保证了每种花都至少被放置了一次,并且是按照编号顺序放置的。

路径记录:通过path数组记录了到达每个状态时的选择路径。
在回溯路径时,我们从dp[n][m]开始,
通过比较path[i][j]和j-1的值来确定是直接放置第i种花在第j个花瓶中,还是跳过当前花瓶,继续考虑下一个
#include <bits/stdc++.h>

using namespace std;

int n, m;
int mp[101][101];
int dp[101][101];
int path[101][101]; // 记录路径

int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> mp[i][j];
        }
    }

    // 初始化
    for (int i = 0; i <= n; i++) {
        for (int j = 0; j <= m; j++) {
            dp[i][j] = INT_MIN;
        }
    }
    for (int j = 0; j <= m; j++) {
        dp[0][j] = 0;
    }

    // 动态规划
    for (int i = 1; i <= n; i++) {
        for (int j = i; j <= m; j++) {
            dp[i][j] = dp[i][j-1]; // 不放第i种花在第j个花瓶中
            if (dp[i-1][j-1] + mp[i][j] > dp[i][j]) {
                dp[i][j] = dp[i-1][j-1] + mp[i][j];
                path[i][j] = j; // 记录路径
            }
        }
    }

    // 输出最大美观程度
    cout << dp[n][m] << '\n';

    // 回溯路径
    vector<int> result(n + 1);
    int i = n, j = m;
    while (i > 0 && j > 0) {
        if (path[i][j] == j) {
            result[i] = j;
            i--;
            j--;
        } else {
            j--;
        }
    }

    // 输出每种花应该摆放的花瓶编号
    for (int i = 1; i <= n; i++) {
        cout << result[i] << ' ';
    }
    cout << '\n';

    return 0;
}

标签:7.29,花瓶,int,ll,ACM,101,日记,dp,define
From: https://www.cnblogs.com/dontian/p/18330928

相关文章

  • 踩坑日记2:idea上git提交出现443报错
    idea代码push踩坑不改代理配置会出现Git报错:Failedtoconnecttogithub.comport443解决方案:https://blog.csdn.net/zpf1813763637/article/details/1283401091.找到代理的端口号在电脑上搜索代理服务器即可2.输入以下指令gitconfig--global--replace-allhttp.prox......
  • 热烈欢迎“鹏粤”选择使用订单日记
    感谢广州鹏粤交通设施有限公司选择使用订单日记!广州鹏粤交通设施有限公司,成立于2016年,位于广州市白云区,是一家专业从事加工钢结构材料、交通标志板材料、声屏障材料、中分带开口活动护栏、防撞垫等产品为主的企业。在业务不断壮大的过程中,想使用一种既能提升运营效率又能......
  • 【日记】今天又是哪朵小云不开心了呀(1886 字)
    正文上午上班没多久,天就特别阴,感觉像是要下暴雨的样子。前台接了一个电话,家里人打来的,她妈妈叮嘱她,要注意一点。他们那边已经开始下了。她转过头对我笑笑说,原来下雨在一个城里也能不同步。当时我笑了笑,对她说,局部降雨还有更局部的,然后打开的视频网站,随便点了一个。......
  • 从零开始的Python开发日记(7):短信验证功能开发流程
    短信验证功能开发流程在开发一个包含登录、注册以及短信验证的功能时,你需要遵循一个系统的开发流程。以下是实现这一功能的基本步骤,包括所需的技术和代码示例。1.环境配置首先,确保你的开发环境已经配置好,并安装了必要的库和工具。pipinstallfastapiuvicornsqlalche......
  • 7.29 我真的只是想安静一会
    纷繁复杂的人际关系,我常常感到疲惫。面对那些不同的人、不同的事,我有时就像缺乏预案逻辑的机器人,手足无措,疲于应付。在超量消耗社交能力之余,我只能更多的沉默。因为沉默并非退缩,而是意味着我需要时间来沉淀思绪,思考如何用更加合理的方式来应对这些事件。沉默是为了更好地观察......
  • 2024年7.26-7.29学习总结/day29-32
    2024年7.26-7.29学习总结部署上线乐泡泡用户中心项目开坑伙伴匹配系统项目刷牛客刷leetcode部署上线​ 域名备案已申请,但是还没通过,让我周三再申请一次,难受。系统上线之后查询系统还有点bug不过别的功能基本上没有问题。这个项目很简单,就算是从0到1走通了全栈开发的一......
  • 集训日记
    如题,这是八月的nihachu(花露水限定版)在【数据删除】集训的日记,虽然说不愿意这样写日记,但感觉每天确实得有点固定且可做的事情。每天的引言随精神状态不定向变异。7.28————“潇洒不是不怕,是愿付出代价”抵达广州,在机场书包带坏了,结果笑得没心没肺跟个傻子一样。周老师帮我......
  • 2024.7.29 test
    A给出\(n,m\),你要求对于所有长度为\(n\)的非负整数序列\(A,B\)中,满足\(\sumA_i=\sumB_i=m\),求\((\sum|A_i-B_i|)^2\)的总和。\(n\le500,m\le10^5\)。首先我们发现\(\sum(A_i-B_i)=0\),所以\(\sum|A_i-B_i|=2\sum_{A_i<B_i}B_i-A_i\)。我们把序列分为两部分,一......
  • JAVA小白学习日记Day12
    CSS定位1.定位属性 在CSS中,position属性用于指定元素在文档流中的定位方式。常用的取值包括:static:默认值,元素遵循正常的文档流布局,不受top、right、bottom、left属性的影响。relative:元素相对于其正常位置进行定位,通过top、right、bottom、left属性可以调整元素相......
  • 7.29 调试及admin
    为什么服务不能启动   go模块支持   go程序启动过程   编译完成之后会在制定目录底下生成一个同名文件, 而不是意向中的service文件 没有搞清楚run是什么的,可以直接运行的 go启动和退出      接口是底层的数据结......