C. Three displays codeforces (dp)

题目链接:C. Three displays
题意:给出一个n,接下来两行 每行n个数字,在第二行中找出三个数,下标i j k满足i
思路:

看到这个题,第一感觉就是dp
1.找长度为3的递增序列,那么可以分解成两个子问题i< j j< k
2.dp[2] [i] 表示第i个位置 时候所找到的一组i j满足对应的和最小
状态转移方程:dp[2][i]=min{dp[2][i],dp[1][j]+dp[1][i]};
3.dp[3][i]表示在2的基础上dp ,前i位组成三个数字,对应的最小和
状态转移方程:dp[3][i]=min{dp[3][i],dp[2][j]+dp[1][j]};

dp[1][j]是题目给的的s[j]

第二个方法(朋友提供):
可以遍历整个数组对每个数字进行计算,以当前位为中间,向左找一个最小的数,向右找一个最小的数,组成i j k ,遍历一遍 最小的值就是答案了

代码:

#include<iostream>
#include<algorithm>
using namespace std;
const long long INF=1e10;
long long dp[4][3005],s[30005];
int main()
{
    int n,i,j;
    cin>>n;
    for(i=1;i<=n;++i)
    cin>>s[i];
    for(i=1;i<=n;++i)
    cin>>dp[1][i];
    for(i=2;i<=n;++i)
    {
        dp[2][i]=INF;
        for(j=1;j<i;++j)
        {
            if(s[i]>s[j])
            {
                dp[2][i]=min(dp[2][i],dp[1][i]+dp[1][j]);
            }
        }
    }
    long long ans=INF;
    for(i=3;i<=n;++i)
    {
        dp[3][i]=INF;
        for(j=2;j<i;++j)
        {
            if(s[i]>s[j])
            {
                dp[3][i]=min(dp[3][i],dp[2][j]+dp[1][i]);
            }
        }
        if(ans>dp[3][i])ans=dp[3][i];
    }
    if(ans>=INF)cout<<-1;
    else cout<<ans;
    return 0;
}
以下是使用Three.js加载VR的步骤: 1. 首先需要在HTML文件中引入Three.js库和WebVR Polyfill库,代码如下: ```html <script src="https://cdn.bootcdn.net/ajax/libs/three.js/r128/three.min.js"></script> <script src="https://cdn.bootcdn.net/ajax/libs/webvr-polyfill/0.10.3/webvr-polyfill.min.js"></script> ``` 2. 接着,需要创建一个WebGL渲染器和一个场景,代码如下: ```javascript var renderer = new THREE.WebGLRenderer(); var scene = new THREE.Scene(); ``` 3. 然后,需要创建一个透视相机和一个立方体几何体,并将其添加到场景中,代码如下: ```javascript var camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000); var geometry = new THREE.BoxGeometry(); var cube = new THREE.Mesh(geometry, new THREE.MeshBasicMaterial({ color: 0x00ff00 })); scene.add(cube); ``` 4. 接下来,需要设置相机的位置和渲染器的大小,并将渲染器的DOM元素添加到页面中,代码如下: ```javascript camera.position.z = 5; renderer.setSize(window.innerWidth, window.innerHeight); document.body.appendChild(renderer.domElement); ``` 5. 最后,需要使用WebVR Polyfill库来启用WebVR,并在渲染循环中更新立方体的旋转角度,代码如下: ```javascript var vrDisplay, vrControls; navigator.getVRDisplays().then(function (displays) { if (displays.length > 0) { vrDisplay = displays[0]; vrControls = new THREE.VRControls(camera); vrDisplay.requestAnimationFrame(animate); } }); function animate() { vrDisplay.requestAnimationFrame(animate); cube.rotation.x += 0.01; cube.rotation.y += 0.01; vrControls.update(); renderer.render(scene, camera); } ``` 运行代码后,就可以在VR设备上查看旋转的立方体了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值