• 【codevs2189】数字三角形+


    题目大意:给定一个数字三角形,求从 (1,1) 走到最后一行的路径和对 100 取余数的最大值。

    题解:由于最优解涉及到取余数的操作,因此按照原先的状态设计并不符合最优子结构性质,即:两个最大数相加取模并不能得到一个最优解。因此将其转化为可行性问题,即:再开一个维度记录下每个位置可能的模值,最后取第 N 行最大的一个就是答案。

    代码如下

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn=30;
    
    int n,ans,mp[maxn][maxn];
    bool dp[maxn][maxn][100];
    
    void read_and_parse(){
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=i;j++)
    			scanf("%d",&mp[i][j]);
    	dp[1][1][mp[1][1]%100]=1;
    }
    
    void solve(){
    	for(int i=1;i<n;i++)
    		for(int j=1;j<=i;j++)
    			for(int k=0;k<100;k++)if(dp[i][j][k]){
    				dp[i+1][j][(k+mp[i+1][j])%100]=1;
    				dp[i+1][j+1][(k+mp[i+1][j+1])%100]=1;
    			}
    	for(int i=1;i<=n;i++)
    		for(int j=0;j<100;j++)
    			if(dp[n][i][j]&&ans<j)ans=j;
    	printf("%d
    ",ans);
    }
     
    int main(){
    	read_and_parse();
    	solve();
    	return 0;
    }
    
  • 相关阅读:
    Python操作Mongo数据库
    Python正则模块
    Python时间模块
    Python协程(下)
    Python协程(中)
    Python协程(上)
    aiohttp
    常用排序算法的Python实现
    江苏省各地级市58同城租房数据
    百合网
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/9994205.html
Copyright © 2020-2023  润新知