暑期集训2期7

蓄水库

hzj老家有一个蓄水库!2020鼠年不利,干旱出现了!政府决定,每天抽水救灾100吨,水库有自己的意念,坚持每天自然出水30吨!这样过了n天后,蓄水库还有s吨水!!问蓄水库在干旱出现前有多少吨水?

追及问题,每次追及路程是70/天,然后乘以天数加上剩余就好

#include<bits/stdc++.h>
using namespace std;
long long n,s;
int main()
{
    
    
    cin>>n>>s;
    cout<<70*n+s;
    return 0;
 } 

数字三角变形1

数字三角形

要求走到最后mod 100最大

用dp[i][j][k]表示第i行j个mod100=k的状态能不能达到,然后三次循环地推

using namespace std;
int n,dp[35][35][105],a[35][35];
int ans;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    for(int j=1;j<=i;j++)
    cin>>a[i][j];
     
    dp[1][1][a[1][1]]=1;
    for(int i=2;i<=n;i++)
    for(int j=1;j<=i;j++)
    for(int k=0;k<=99;k++)
    if(dp[i-1][j][k]||dp[i-1][j-1][k])dp[i][j][(k+a[i][j])%100]=1;//状态转移
 
 
 
    for(int i=1;i<=n;i++)
    for(int j=99;j>=0;j--)
    if(dp[n][i][j])ans=max(ans,j);
     
    cout<<ans;
    return 0;
 } 


分发黄金在这里插入图片描述

设立状态,dp[i]表示的是到i这个位置,获得的最大价值,然后往后面推,或者从前面推过来,注意不要超边界

#include<bits/stdc++.h>
using namespace std;
int n,s,t,a[1500],dp[1500];
int main()
{
    
    
    cin>>n>>s>>t;
    for(int i=1;i<=n;i++)cin>>a[i];
     
    dp[1]=a[1];
    for(int i=2;i<=n;i++)
    {
    
    
        for(int j=s;j<=t;j++)
        if(i-j>=1)//从1推过来
        dp[i]=max(dp[i],dp[i-j]+a[i]);
    }
    cout<<dp[n];
    return 0;
}


对称二叉树(加强版)

对称二叉树(加强版)

猜你喜欢

转载自blog.csdn.net/yhhy666/article/details/108275928