zoukankan      html  css  js  c++  java
  • Daliy Algorithm -- day 102

    Nothing to fear


    种一棵树最好的时间是十年前,其次是现在!

    那些你早出晚归付出的刻苦努力,你不想训练,当你觉的太累了但还是要咬牙坚持的时候,那就是在追逐梦想,不要在意终点有什么,要享受路途的过程,或许你不能成就梦想,但一定会有更伟大的事情随之而来。 mamba out~

    2020.8.7


    人一我十,人十我百,追逐青春的梦想,怀着自信的心,永不言弃!

    合唱队形

    关键点在于反向再求一次最长上升子序列,最后比较每个数字 i 从左边到 以 i 为结尾得LIS 和 从右边到以i为结尾得LIS .

    ans = min(ans , ans - f[i] - g[i]) + 1;

    #include <bits/stdc++.h>
    
    using namespace std;
    const int N = 105;
    int n;
    int h[N];
    int f[N] , g[N];
    int main()
    {
    	cin >> n;
    	for(int i = 1;i <= n ;i ++)
    		cin >> h[i];
    
    	for(int i = 1;i <= n;i ++)
    	{
    		f[i] = 1;
    		for(int j = 1;j < i;j ++)
    		{
    			if(h[i] > h[j])
    				f[i] = max(f[i], f[j] + 1);
    		}
    	}
    	for(int i = n;i >= 1;i --)
    	{
    		g[i] = 1;
    		for(int j = i + 1;j <= n;j ++)
    		{
    			if(h[i] > h[j])
    				g[i] = max(g[i] , g[j] + 1);
    		}
    	}
    	int ans = n;
    	for(int i = 1;i <= n;i ++)
    	{
    		ans = min(ans , n - g[i] - f[i]);
    	}
    	cout << ans + 1 << endl;
    	return 0;
    }
    

    打印数字三角形

    水题

    #include <bits/stdc++.h>
    
    using namespace std;
    int n;
    int main()
    {
    	cin >> n;
    	int cnt = 1;
    	for(int i = 1;i <= n;i ++)
    	{
    		for(int j = 1;j <= i;j ++){
    			printf("%4d",cnt++);
    		}
    		cout << endl;
    	}
    	return 0;
    }
    

    开心的金明

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 30005;
    const int M = 50;
    int v[N] , w[N];
    int f[M][N];
    
    int main()
    {
    	int n , m;
    	cin >> n >> m;
    	for(int i = 1;i <= m;i ++)
    	{
    		cin >> v[i] >> w[i];
    	} 
    	memset(f , 100000000 , sizeof f);
    	f[0][0] = 0;
    	for(int i = 1;i <= m;i ++)
    	{
    		for(int j = 0;j <= n;j ++)
    			f[i][j] = f[i-1][j];
    		for(int j = v[i];j <= n;j ++)
    		{
    			if(j >= v[i])
    				f[i][j] = max(f[i][j] , f[i-1][j-v[i]] + v[i] * w[i]);
    		}
    	}
    	cout << f[m][n] << endl;
    	return 0;
    }
    

    最大值

    线段树板子题

    #include <bits/stdc++.h>
    
    #define ls u << 1
    #define rs u << 1 | 1
    
    using namespace std;
    
    const int N = 200005;
    
    struct node{
    	int l , r , val = 0;
    }tr[4 * N];
    
    // 向父节点反馈信息
    void pushup(int u)
    {
    	tr[u].val = max(tr[ls].val , tr[rs].val);
    }
    // 建树
    void build(int u , int l , int r)
    {
    	tr[u].l = l , tr[u].r = r; // 标注该节点所管辖的区间
    	if(l == r) return;
    	int mid = l + r >> 1;
    	build(ls , l , mid), build(rs , mid + 1 , r);
    	//pushup(u);
    }
    // 单点修改
    void modify(int u , int x , int v)
    {
    	if(tr[u].l == x && x == tr[u].r)
    	{
    		tr[u].val = v;
    		return;
    	}
    	int mid = tr[u].l + tr[u].r >> 1;
    	if(x <= mid)modify(ls , x , v);
    	else modify(rs , x , v);
    	pushup(u);
    }
    // 区间查询
    int query(int u,int l,int r)
    {
    	if(tr[u].l >= l && tr[u].r <= r)return tr[u].val;
    	int mid = tr[u].l + tr[u].r >> 1;
    	int val = -1;
    	if(l <= mid)val = max(val , query(ls , l , r));
    	if(r > mid) val = max(val , query(rs , l , r));
    	return val;
    }
    int main()
    {
    	int m , p , n = 0 ,val = 0;
    	cin >> m >> p;
    	build(1 , 1 , m);
    	for(int i = 0;i < m;i ++)
    	{
    		char op;int x;
    		cin >> op >> x;
    		if(op == 'A')
    		{
    			n++;
    			modify(1 , n , (x + val) % p);
    		}else {
    			val = query(1 , n - x + 1, n);
    			cout << val << endl;
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    (原创)xcode4的workspace里各lib工程与app工程联编之runscript简介
    使用textmate
    (转)DebuggingTechniques
    (转)ObjectiveC的单例模式(singleton)
    VIA = Via Inner Action
    Das Vergessmichnicht
    Resume
    Explore Subdivide Surface Algorithm Of Maya
    为什么我的文章总是没人回复
    Summer Dream Für Meines Leben
  • 原文地址:https://www.cnblogs.com/wlw-x/p/13455559.html
Copyright © 2011-2022 走看看