zoukankan      html  css  js  c++  java
  • HDU 5074 Hatsune Miku 2014 Asia AnShan Regional Contest dp(水

    简单dp



    #include <stdio.h>
    #include <cstring>
    #include <iostream>
    #include <map>
    using namespace std;
    typedef unsigned long long ull;
    const int N = 105;
    int n, m, a[N];
    int s[N][N], dp[2][N];
    void pt(int x ){
    	for(int i = 1; i <= m; i++)printf("%d ", dp[x][i]); puts("");
    }
    int solve(){
    	int cur = 0;
    	if(a[1] < 0)
    	memset(dp[cur], 0, sizeof dp[cur]);
    	else
    	{
    		memset(dp[cur], -1, sizeof dp[cur]);
    		dp[cur][a[1]] = 0;
    	}
    	for(int i = 2; i <= n; i++)
    	{
    		cur ^= 1;
    		memset(dp[cur], -1, sizeof dp[cur]);
    		if(a[i]>0)
    		{
    			for(int j = 1; j <= m; j++)
    				if(dp[cur^1][j] != -1)
    				dp[cur][a[i]] = max(dp[cur][a[i]], dp[cur^1][j] + s[j][a[i]]);
    		}
    		else
    		{
    			for(int j = 1; j <= m; j++)
    				if(dp[cur^1][j]!=-1)
    					for(int k = 1; k <= m; k++)
    						dp[cur][k] = max(dp[cur][k], dp[cur^1][j]+s[j][k]);
    		}
    	//	cout<<i<<":"; pt(cur);
    	}
    	int ans = 0;
    	for(int i = 1; i <= m; i++)
    		ans = max(ans, dp[cur][i]);
    	return ans;
    }
    void input(){
    	cin>>n >> m;
    	for(int i = 1; i <= m; i++)
    		for(int j = 1; j <= m; j++)
    			scanf("%d", &s[i][j]);
    	for(int i = 1; i <= n; i++) scanf("%d", &a[i]);
    }
    int main(){
        int T; cin>>T;
        while(T--){
        	input();
        	cout<<solve()<<endl;
        }
        return 0;
    }
    /*
    9
    3 3
    1 1 5
    5 1 100
    1 5 1
    -1 -1 -1
    
     */


  • 相关阅读:
    2021 0309-1 准备工作
    课程总结
    第十四周课程总结&实验报告
    第十三周课程总结
    第十二周课程总结
    第十一周课程总结
    第十周课程总结
    2019春总结作业
    第十二周作业
    第十一周作业
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7147760.html
Copyright © 2011-2022 走看看