0
点赞
收藏
分享

微信扫一扫

naoqi机器人总结19

Java架构领域 2022-02-04 阅读 78

1.基础算法

1022-Music Problem_2021秋季算法入门班第七章习题:动态规划1 (nowcoder.com)

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+1,mod=3600;
int dp[2][3600];
int a[N];
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            scanf("%d",&a[i]);
            a[i]%=mod;
        }
        memset(dp,0,sizeof(dp));
        dp[0][0]=1;
        for(int i=1;i<=n;++i){
            if(dp[0][0]>1){
                break;
            }
            for(int j=0;j<3600;++j){//将它们根据模3600的结果分成3600组,选出模为0的数
                int now=((j-a[i])%mod+mod)%mod;
                dp[1][j]+=dp[0][now];
            }
            for(int j=0;j<=3600;++j){
                dp[0][j]+=dp[1][j];
                dp[1][j]=0;
            }
        }
        if(dp[0][0]>1){
            puts("YES");
        }else{
            puts("NO");
        }
    }
    return 0;
}

1023-美味菜肴_2021秋季算法入门班第七章习题:动态规划1 (nowcoder.com)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[1<<20],b[1<<20];

struct node
{
    ll b,a,c;
}a[1<<20];
bool cmp(node x,node y){
    return x.b*y.c>x.c*y.b;
}

int main()
{
    int n,m,T;
	cin>>n>>m>>T;
    for(int i=1;i<=n;i++) cin>>b[i];
    for(int i=1;i<=m;i++) cin>>a[i].b>>a[i].a>>a[i].c, a[i].b=b[a[i].b];
    sort(a+1,a+1+m,cmp);
    for(int i=1;i<=T;i++) dp[i]=-1e18;
    for(int i=1;i<=m;i++)
        for(int l=T;l>=a[i].c;l--)
            dp[l]=max(dp[l],dp[l-a[i].c]+a[i].a-l*a[i].b);
    ll ans=-1e18;
    for(int i=1;i<=T;i++) ans=max(ans,dp[i]);
    cout<<ans<<endl;
    return 0;
}
举报

相关推荐

0 条评论