package s3;
import java.util.Scanner;
import javax.swing.plaf.nimbus.State;
import org.omg.CORBA.PUBLIC_MEMBER;
public class test9 {
/*
標題:地宮取寶
X 國王有一個地宮寶庫。是 n x m 個格子的矩陣。每個格子放一件寶貝。每個寶貝貼着價值標籤。
地宮的入口在左上角,出口在右下角。
小明被帶到地宮的入口,國王要求他只能向右或向下行走。
走過某個格子時,如果那個格子中的寶貝價值比小明手中任意寶貝價值都大,小明就可以拿起它(當然,也可以不拿)。
當小明走到出口時,如果他手中的寶貝恰好是k件,則這些寶貝就可以送給小明。
請你幫小明算一算,在給定的局面下,他有多少種不同的行動方案能獲得這k件寶貝。
【數據格式】
輸入一行3個整數,用空格分開:n m k (1<=n,m<=50, 1<=k<=12)
接下來有 n 行數據,每行有 m 個整數 Ci (0<=Ci<=12)代表這個格子上的寶物的價值
要求輸出一個整數,表示正好取k個寶貝的行動方案數。該數字可能很大,輸出它對 1000000007 取模的結果。
例如,輸入:
2 2 2
1 2
2 1
程序應該輸出:
2
再例如,輸入:
2 3 2
1 2 3
2 1 5
程序應該輸出:
14
*/
static int jj=0;
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int m=scan.nextInt();
int k=scan.nextInt();
int [][]s=new int[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
s[i][j]=scan.nextInt();
}
}
String o="";//獲取值
f(s,n,m,k,0,0,0,o);
System.out.println(jj%1000000007);
}
public static void f(int s[][],int n,int m,int k,int sum,int x,int y,String o){
if(x>=n||y>=m){
return;
}
if(sum>k){
return;
}
if(x==n-1&&y==m-1){
String o1=o+s[x][y];//最後一個取
String o2=o;//最後一個不取
char[] a=o1.toCharArray();
int pan=0;//判斷用
//System.out.println(o1);
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[i]-'0'>=a[j]-'0'){
//System.out.println(a[i]+","+a[j]);
pan=1;
break;
}
}
if(pan==1){
break;
}
}
if(pan==0&&a.length==k){
jj++;
//System.out.println("dui"+o1);
}
//System.out.println();
//System.out.println();
//System.out.println();
pan=0;//初始化判斷下一個
char[] a1=o2.toCharArray();
//System.out.println(a1);
for(int i=0;i<a1.length-1;i++){
for(int j=i+1;j<a1.length;j++){
if(a1[i]-'0'>=a1[j]-'0'){
//System.out.println(a1[i]+","+a1[j]);
pan=1;
break;
}
}
if(pan==1){
break;
}
}
if(pan==0&&a1.length==k){
jj++;
//System.out.println("dui"+o2);
}
//System.out.println();
//System.out.println();
//System.out.println();
return;
}else{
//不取
f(s,n,m,k,sum,x+1,y,o);//下
f(s,n,m,k,sum,x,y+1,o);//右
//取
f(s,n,m,k,sum+1,x+1,y,o+s[x][y]);//下
f(s,n,m,k,sum+1,x,y+1,o+s[x][y]);//右
}
}
}
藍橋杯題目9地宮取寶
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
藍橋杯題目6李白打酒
package s3; public class test6 { private static int q=0; public st
blue_lanse
2020-06-25 23:15:54
藍橋杯題目10矩陣翻硬幣
package s3; import java.util.Scanner; public class test10 { /* 標題:矩陣翻硬幣
blue_lanse
2020-06-25 23:15:54
藍橋杯題目8蘭頓螞蟻 蘭頓螞蟻,是於1986年,由克里斯·蘭頓提出來的,屬於細胞自動機的一種。
package s3; import java.util.Scanner; public class test8 { /* * 標
blue_lanse
2020-06-25 23:15:54
[藍橋杯] 國王的煩惱 並查集+思維
Garett_Zeng
2020-06-20 04:17:40
2017【第八屆藍橋杯初賽】 C/C++ B組
From now on...
2020-06-17 11:57:58
dotcpp1441-2013年第四屆真題-幸運數(。。?)
[藍橋杯][2013年第四屆真題]幸運數 時間限制: 1Sec 內存限制: 128MB 提交: 836 解決: 384 題目描述 幸運數是波蘭數學家烏拉姆命名的。它採用與生
From now on...
2020-06-17 11:57:58
藍橋杯 2019 Java C 矩陣分割 帶原理解析
学市场营销只有饿死
2020-05-10 14:25:24
藍橋杯 日曆問題 星際炸彈
学市场营销只有饿死
2020-05-06 04:52:12
藍橋杯 DFS第四屆Java C組 第二題 求素數 個數
学市场营销只有饿死
2020-05-06 04:52:12
Java實現 LeetCode 887 雞蛋掉落(動態規劃,谷歌面試題,藍橋杯真題)
南 墙
2020-04-14 09:30:40
藍橋杯題目1猜年齡
blue_lanse
2020-02-25 11:37:19
藍橋杯題目2等額本金
blue_lanse
2020-02-25 11:37:19
藍橋杯題目3猜字母
blue_lanse
2020-02-25 11:36:59