ブルーブリッジカップ全国大会準備DAY5

dp、interval dp、線分ツリー、ツリーのような配列を記憶し、演習を収集します。

間隔dp:
1。石がマージされます
2.パスワードが落ちます

ユニオンチェックセット:
1。マージセット
2.接続されたブロック内のポイント数
3.食物連鎖
4.村の電気(最小全域木)

記憶されたdp:
1。スキー
2.マトリックス内の最長の増分パス

ツリー配列、線分ツリー:
0。サブマトリックスプレフィックスと
1。プレフィックスと
2。連続間隔を動的に検索します
。2。星を数えます

2018年第9回ブルーブリッジカップJavaプログラミング学部グループBの個々の問題解決策の概要決勝:
問題2
タイトル:最大の製品

1から9までの9つの数字を2つのグループに分け、中央に乗算記号を挿入します。
場合によっては、それらの積には1から9までの9つの数字しか含まれず、各数字は1回しか表示されません。

例:
984672 * 351 = 345619872
98751 * 3462 = 341875962
9 * 87146325 = 784316925

このルールに準拠した計算式はたくさんありますが、これらすべての式の中で最大の製品はどれですか?

提出する必要があるのは整数であり、最大の製品を表すことに注意してください。余分なコンテンツは入力しないでください。
(製品のみを提出し、計算全体を提出しないでください)

フルアレンジ

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<set>
#include<algorithm>
#include<sstream>
using namespace std;

int a[9]={
    
    1,2,3,4,5,6,7,8,9};
int t[9];
long long rrrr;
int l_range,r_range;
int main(){
    
    
	do{
    
    
        for(int i=0;i<=7;i++){
    
    
            int ln=i+1,rn=9-ln;
            
            long long rl=0;
            long long rr=0;
            long long rres=0;
            string s;
            string s1,s2; 
            
			for(int j=0;j<=i;j++){
    
    
				stringstream sb;
				sb<<a[j];				
				s1+=sb.str();
			} 
			for(int k=i+1;k<=8;k++){
    
    
				stringstream sb;
				sb<<a[k];
				
				s2+=sb.str();
			}

			stringstream sa1,sa2;
			sa1<<s1;
			sa1>>rl;
			sa2<<s2;	
			sa2>>rr; 

            rres=rl*rr;
            stringstream ssb;
            ssb<<rres;
            s=ssb.str();

            set<char> st;
            int flag=0;
            for(int u=0;u<s.size();u++){
    
    
            	if(s[u]=='0'){
    
    
            		flag=1;
            		break;
            	}
                st.insert(s[u]);
            }
            if(flag){
    
    
            	continue;
            }
            if(st.size()==s.size() && rres>rrrr){
    
    
            	l_range=rl;
            	r_range=rr;
            	for(int i=0;i<=8;i++){
    
    
            		t[i]=a[i];
            	}
                rrrr=rres;
            }
        }
    }while(next_permutation(a,a+9));
    cout<<"??1:"<<l_range<<endl;
    cout<<"??2:"<<r_range<<endl;
    cout<<"结果:"<<rrrr<<endl;
    cout<<endl;
    
    return 0;
}

おすすめ

転載: blog.csdn.net/BOWWOB/article/details/109365466