time limit: 1 second
memory limit: 128 mb
【問題描述】
當小ff來到神廟時,神廟已經破敗不堪了。但神廟的**有乙個光亮如新的石台。小ff走進石台, 發現石台上有乙個數串,而數串
的上方刻著一串古老的符文之語。精通古符文之語的小ff不費吹灰之力就讀懂了文章的意思,其大意是:對於石台上的一串數
字,你可以在適當的位置加入乘號(設加了k個,當然也可不加,即分成k+1個部分),設這k+1個部分的乘積(如果k=0,則乘
積即為原數串的值)對m的餘數(即mod m)為x;現求x能達到的最小值及該情況下k的最小值,以及x能達到的最大值及該情況下
的k的最小值(可以存在x的最小值與最大值相同的情況)。小ff還知道,如果他找到了正確的答案,那麼就可以通往神廟的下層
了。但這個問題似乎不太好解決,小ff就找到了你,並答應找到財寶以後和你二八分(當然你拿二……)。
【資料範圍】
對於30%的資料:2≤字串的長度l≤50。
對於100%的資料:2≤字串的長度l≤1000;2≤m≤50。
【輸入格式】
第一行為數串,且數串中不存在0; 第二行為m。
【輸出格式】
四個數,分別為x的最小值和該情況下的k,以及x的最大值和該情況下的k,相鄰兩個數之間用以個空格隔開。
sample input
4421
22sample output
0 1 21 0
【題目鏈結】:
【題解】
設f[i][j]表示前i個數字組成的數字%m的值為j時最少需要加入的乘號個數;
設mod[i][j]表示從第i到第j個數字組成的數字%m的值為多少;(這個可以用同餘率搞出來);
令t = (j*mod[i+1][k])%m;
則f[k][t] = min(f[k][t],f[i][j]+1);
最後分別順序列舉、倒序列舉一下i輸出相應的f[n][i]就好;
這裡狀態的表示感覺不好想。
想出來後寫**就比較輕鬆了;
【完整**】
#include
#include
#include
#include
using
namespace
std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define ll long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%i64d",&x)
typedef pair pii;
typedef pairpll;
const
int dx[9] = ;
const
int dy[9] = ;
const
double pi = acos(-1.0);
const
int maxl = 1100;
const
int maxm = 50+10;
const
int inf = 0x3f3f3f3f;
char s[maxl];
int m,a[maxl],len,mod[maxl][maxl];
int f[maxl][maxm];
int main()
memset(f,0x3f3f3f3f,sizeof f);
rep1(i,1,len)
f[i][mod[1][i]] = 0;
rep1(i,1,len)
rep1(j,0,m-1)
if (f[i][j]1,len)
}rep1(j,0,m-1)
if (f[len][j]printf("%d %d ",j,f[len][j]);
break;
}rep2(j,m-1,0)
if (f[len][j]printf("%d %d\n",j,f[len][j]);
break;
}return
0;}
NOI導刊2010提高 符文之語
題目傳送門 難得能自己想出來一道藍色的 dp 設f i j 表示前 i 個數表示出取模結果為 j 時的最小 k 值,sum i j 表示區間 i,j 所表示數值取模後的結果,顯然,轉移為 f i k sum j 1 i min f j k 1,f i k sum j 1 i include incl...
32 T5L 迪文屏 C51開發之資料儲存模型
上一章節我們學習了nor flash儲存器,而本章節就是基於nor flash儲存器來做乙個常用的儲存模型,這在實際的應用專案當中是非常有用的,當然了我們這個儲存模型可以應用在任何的儲存器上,而不是僅侷限於nor flash儲存器。我們這裡所謂的儲存模型就是用結構體的方式來集中管理所需要儲存的字段資...
c語言核心整理之資料型別,運算子,表示式和語句
1,資料型別,運算子,表示式和語句 1 基本資料型別 整型 浮點型 指標和聚合型別 陣列 結構體 1 整型 字元 短整型 整型 長整型 都分為有符號和無符號兩種 長整型至少應該和整型一樣長,而整型至少應該和短整型一樣長。short int至少16位,long int至少32位,一般3個整型值都被設為...