洛谷P1879 [USACO06NOV]玉米田Corn Fields【狀壓dp】

P1879 [USACO06NOV]玉米田Corn Fields
時間限制 1.00s
內存限制 125.00MB
題目描述
Farmer John has purchased a lush new rectangular pasture composed of M by N (1 ≤ M ≤ 12; 1 ≤ N ≤ 12) square parcels. He wants to grow some yummy corn for the cows on a number of squares. Regrettably, some of the squares are infertile and can’t be planted. Canny FJ knows that the cows dislike eating close to each other, so when choosing which squares to plant, he avoids choosing squares that are adjacent; no two chosen squares share an edge. He has not yet made the final choice as to which squares to plant.

Being a very open-minded man, Farmer John wants to consider all possible options for how to choose the squares for planting. He is so open-minded that he considers choosing no squares as a valid option! Please help Farmer John determine the number of ways he can choose the squares to plant.

農場主John新買了一塊長方形的新牧場,這塊牧場被劃分成M行N列(1 ≤ M ≤ 12; 1 ≤ N ≤ 12),每一格都是一塊正方形的土地。John打算在牧場上的某幾格里種上美味的草,供他的奶牛們享用。

遺憾的是,有些土地相當貧瘠,不能用來種草。并且,奶牛們喜歡獨占一塊草地的感覺,于是John不會選擇兩塊相鄰的土地,也就是說,沒有哪兩塊草地有公共邊。

John想知道,如果不考慮草地的總塊數,那么,一共有多少種種植方案可供他選擇?(當然,把新牧場完全荒廢也是一種方案)

輸入格式
第一行:兩個整數M和N,用空格隔開。

第2到第M+1行:每行包含N個用空格隔開的整數,描述了每塊土地的狀態。第i+1行描述了第i行的土地,所有整數均為0或1,是1的話,表示這塊土地足夠肥沃,0則表示這塊土地不適合種草。

輸出格式
一個整數,即牧場分配總方案數除以100,000,000的余數。

輸入輸出樣例
輸入 #1 復制
2 3
1 1 1
0 1 0
輸出 #1 復制
9

解題思路:
假設dp[i][j]dp[i][j]dp[i][j]為第iii行在jjj狀態下前iii行的方案數,因此,對于此題,我們只需要遍歷一下每行的狀態(對于每行,我們將一行的種植情況放在一起作為一個二進制數,用十進制存儲,對于每行的狀態,用1表示該塊種草,0表示不種),即從0 ~ ((1<<m)-1)遍歷每行的狀態,同時在遍歷的過程中判斷狀態是否合法,即狀態是否在不能種草的地方種了草,即對應位狀態上為1而初始要求為0,并將合法的狀態存到動態數組中保存起來,從第二行開始,每行的狀態還需考慮前一行的情況,要求其在對應位不能同時為1,即當前狀態與前一行狀態取與后結果為0,因此就可以寫出動態轉移方程
dp[h][sta]=(dp[h][sta]+dp[h?1][arr[h?1][i]])%moddp[h][sta]=(dp[h][sta]+dp[h-1][arr[h-1][i]])\%moddp[h][sta]=(dp[h][sta]+dp[h?1][arr[h?1][i]])%mod
sta為當前hhh行的狀態,dp[h?1][arr[h?1][i]]dp[h-1][arr[h-1][i]]dp[h?1][arr[h?1][i]]為遍歷的前一行的狀態。

代碼:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <map>
#include <stack>
#include <queue>
#include <vector>
#include <bitset>
#include <set>
#include <utility>
#include <sstream>
#include <iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define inf 0x3f3f3f3f
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define lep(i,l,r) for(int i=l;i>=r;i--)
#define ms(arr) memset(arr,0,sizeof(arr))
//priority_queue<int,vector<int> ,greater<int> >q;
const int maxn = (int)1e5 + 5;
const ll mod = 1e8;
ll dp[20][8000];
ll ans;
int a[20][20];
vector<int> arr[20];
int n,m;
bool ju1(int sta,int h) {for(int i=1;i<=m;i++) {if(a[h][i]==0&&(sta&(1<<(i-1)))==(1<<(i-1))) {return false;}}return true;
}
int num[20];
bool ju2(int sta) {ms(num);int id=0;while(sta) {num[++id]=(sta&1);sta>>=1;}for(int i=1;i<id;i++) {if(num[i]==1&&num[i+1]==1) {return false;}}return true;
}
void fun(int sta,int h) {for(int i=0;i<arr[h-1].size();i++) {if((sta&arr[h-1][i])==0) {dp[h][sta]=(dp[h][sta]+dp[h-1][arr[h-1][i]])%mod;//cout<<dp[h][sta]<<endl;}}
}
int main() 
{#ifndef ONLINE_JUDGEfreopen("in.txt", "r", stdin);#endif//freopen("out.txt", "w", stdout);//ios::sync_with_stdio(0),cin.tie(0);scanf("%d %d",&n,&m);rep(i,1,n) {rep(j,1,m) {scanf("%d",&a[i][j]);}}for(int i=0;i<(1<<m);i++) {if(ju1(i,1)&&ju2(i)) {arr[1].push_back(i);dp[1][i]=1;}if(n==1) {ans=(ans+dp[1][i])%mod;}}for(int i=2;i<=n;i++) {for(int j=0;j<(1<<m);j++) {if(ju1(j,i)&&ju2(j)) {fun(j,i);arr[i].push_back(j);}if(i==n) {ans=(ans+dp[i][j])%mod;//cout<<ans<<endl;}}}/*for(int i=1;i<=n;i++) {for(int j=0;j<(1<<m);j++) {cout<<dp[i][j]<<" ";}cout<<endl;}*/printf("%lld\n",ans);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536267.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536267.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536267.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LEAGUE TABLES【模擬】

LEAGUE TABLES 時間限制: 1 Sec 內存限制: 128 MB 提交: 349 解決: 150 [提交] [狀態] [命題人:admin] 題目描述 League football (known in some circles as soccer) has been played in England since 1888 and is the most popular winter game through most of Europe, jus…

MUSICAL CHAIRS【模擬】

MUSICAL CHAIRS 時間限制: 1 Sec 內存限制: 128 MB 提交: 386 解決: 76 [提交] [狀態] [命題人:admin] 題目描述 Musical chairs is a game frequently played at children’s parties. Players are seated in a circle facing outwards. When the music starts, the players h…

Bomb HDU - 3555【數位dp】

Bomb HDU - 3555 The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the current number sequence includes the sub-sequence “49”, the power…

不要62 HDU - 2089【數位dp】

不要62 HDU - 2089 杭州人稱那些傻乎乎粘嗒嗒的人為62&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局經常會擴充一些的士車牌照&#xff0c;新近出來一個好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的數字了&#xff0c;這樣一來&#xff0c;就可…

PACKING【二維01背包】

PACKING 時間限制: 1 Sec 內存限制: 128 MB 提交: 278 解決: 24 [提交] [狀態] [命題人:admin] 題目描述 It was bound to happen. Modernisation has reached the North Pole. Faced with escalating costs for feeding Santa Claus and the reindeer, and serious difficulti…

機器人軍團【動態規劃】

機器人軍團 時間限制: 1 Sec 內存限制: 64 MB 提交: 279 解決: 139 [提交] [狀態] [命題人:admin] 題目描述 邪狼&#xff1a;“怎么感覺這些機器人比我還聰明&#xff1f;不是說人工智能永遠不能超越人類嗎&#xff1f;” 天頂星人&#xff1a;“你們真是目光短淺&#xff0c…

【動態規劃】抄近路

【動態規劃】抄近路 時間限制: 1 Sec 內存限制: 64 MB 提交: 105 解決: 68 [提交] [狀態] [命題人:admin] 題目描述 “最近不知道怎么回事&#xff0c;感覺我們這個城市變成了一個神奇的地方&#xff0c;有時在路上走著走著人就消失了&#xff01;走著走著突然又有人出現了&…

【動態規劃】魔法石礦

【動態規劃】魔法石礦 時間限制: 1 Sec 內存限制: 64 MB 提交: 116 解決: 27 [提交] [狀態] [命題人:admin] 題目描述 為了找到回家的路&#xff0c;張琪曼施展魔法&#xff0c;從高維空間召喚出了一種叫作“讀者”的生物&#xff0c;據說“讀者”這種生物無所不能&#xff0c;…

Knapsack Cryptosystem【折半+查找】

鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/889/D 來源&#xff1a;牛客網 Amy asks Mr. B problem D. Please help Mr. B to solve the following problem. Amy wants to crack Merkle–Hellman knapsack cryptosystem. Please help it. Given an array {ai} wi…

All men are brothers【并查集+數學】

鏈接&#xff1a;https://ac.nowcoder.com/acm/contest/889/E 來源&#xff1a;牛客網 題目描述 Amy asks Mr. B problem E. Please help Mr. B to solve the following problem. There are n people, who don’t know each other at the beginning. There are m turns. In e…

Light bulbs【差分】

19.98% 1000ms 8192K There are NN light bulbs indexed from 00 to N-1N?1. Initially, all of them are off. A FLIP operation switches the state of a contiguous subset of bulbs. FLIP(L, R)FLIP(L,R)means to flip all bulbs xx such that L \leq x \leq RL≤x≤R. S…

Digit sum【暴力+打表】

Digit sum 33.57% 2000ms 131072K A digit sum S_b(n)S b ? (n) is a sum of the base-bb digits of nn. Such as S_{10}(233) 2 3 3 8S 10 ? (233)2338, S_{2}(8)1 0 0 1S 2 ? (8)1001, S_{2}(7)1 1 1 3S 2 ? (7)1113. Given NN and bb, you need to calcu…

P1040 加分二叉樹【dp+深搜】

題目描述 設一個nn個節點的二叉樹tree的中序遍歷為&#xff08;1,2,3,…,n1,2,3,…,n&#xff09;&#xff0c;其中數字1,2,3,…,n1,2,3,…,n為節點編號。每個節點都有一個分數&#xff08;均為正整數&#xff09;&#xff0c;記第ii個節點的分數為di,treedi,tree及它的每個子樹…

Helloworld【C#】

c#Helloworld 題目描述 請輸出樣例所示內容 輸出 樣例輸出 ********** Hello,world! ********** using System;namespace ConsoleApp1 {class Program{static void Main(string[] args){Console.WriteLine("**********");Console.WriteLine("Hello,world!&…

判斷閏年【C#】

判斷閏年 題目描述 使用C#編寫一個控制臺應用。輸入-一個年份&#xff0c;判斷是否潤年(被4整除&#xff0c;且不被100整除&#xff0c;或者被400整除)。 是閏年輸出yes&#xff0c;不是輸出no 輸入 一個年份 輸出 yes或者no 樣例輸入 1996 樣例輸出 yes using Syst…

采用遞歸求第n位數【C#】

題目描述 一數列的規則如下&#xff1a;1、1、2、3、5、8、13、21、34......。求第n位數是多少&#xff1f; 輸入 輸入一個正整數&#xff0c;代表求第幾位數字 輸出 輸出第n位數字 樣例輸入 30 樣例輸出 832040 提示 輸入數字必須大于零 using System;namespace C…

歌手的分數【C#】

歌手的分數 題目描述 一青年歌手參加比賽。使用C#編寫-一個控制臺應用&#xff0c;輸入10位評委打分(分值只能為正整數)&#xff0c;計算并輸出歌手的平均分(去掉一一個最高分和一一個最低分)。平均分以double數據類型輸出。 輸入 1 2 3 4 5 6 7 8 9 10 輸出 5.5 樣例輸…

冒泡排序算法(C#)

冒泡排序算法&#xff08;C#&#xff09; 題目描述 使用C#編寫一個控制臺應用。輸入10個整數存入數組中&#xff0c;然后使用冒泡排序算法對一維數組的元素從小到大進行排序&#xff0c;并輸出。 輸入 在控制臺中輸入數字&#xff0c;存入一維數組 輸出 輸出排序后的數…

水仙花數【C#】

題目描述 春天是鮮花的季節&#xff0c;水仙花就是其中最迷人的代表&#xff0c;數學上有個水仙花數&#xff0c;他是這樣定義的&#xff1a; “水仙花數”是指一個三位數&#xff0c;它的各位數字的立方和等于其本身&#xff0c;比如&#xff1a;1531^35^33^3。 現在要求輸出…

C#異或運算符的使用【C#】

C#異或運算符的使用 題目描述 編寫一個控制臺應用&#xff0c;采用異或運算符&#xff0c;實現兩個整型變量值的交換。并在Program類的Main進行驗證。 輸入 依次輸入2個整數 輸出 輸出交換前、后兩個變量的值 樣例輸入 12 78樣例輸出 before exchange first12,second7…