太弱,什麼都不會(qrz)
給你乙個n,然後你要用乙個序列構成0到n的所有數(構成方法就是從序列中選若干個數加起來)問你有多少種這樣的序列,和是相同的序列
首先,看下n範圍5000,複雜度肯定是n^2打表。
然後賽上各種推不出狀態。。。
其實,肯定有一維狀態要表示整個序列的和,那麼就是dp[i],i為整個序列的和的方法數。然後嘗試轉移會發現很迷茫。。顯然再加一維,考慮到對整個序列排個序之後,我們只放大於等於整個序列最大元素的數,那麼又肯定要有一維狀態來表示當前序列的最大元素。
最後dp[i][j]表示,整個序列的和為i,且序列中最大元素為j的方法數。
接下來我們考慮轉移,假設dp[i][j]正確且已知,那麼dp[i][j]已經能夠表示0-i的所有數,考慮接下來我們將在集合裡新增的數k,k肯定大於等於j,但是當k大於i+1的時候,整個序列是無法表示i+1的,因此j<=k<=i+1
因此dp[i+k][k] += dp[i][j];
這樣,我們發現複雜度是n^3,狀態需要修改下,使得能讓我們預處理降低一維複雜度,看看轉移狀態,第二維的k是顯然沒法改變的,於是我們嘗試改變第一維。我們發現,i+k是與k有關的,於是定義狀態dp[i][j]表示整個序列的和為i+j,且序列中最大元素為j的方法數,於是有轉移dp[i+j][k] += dp[i][j] (j <= k <= i+j+1)
然後我們不必要每次都加,直接dp[i+j][j] += dp[i][j], dp[i+j][i+j+2] -= dp[i][j],每次再求個字首和即可
//
// created by running photon on 2016-04-07
//#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define all(x) x.begin(), x.end()
#define ins(x) inserter(x, x,begin())
#define ll long long
#define clr(x) memset(x, 0, sizeof x)
using
namespace
std;
const
int inf = 0x3f3f3f3f;
const
int mod = 1e9 + 7;
const
int maxn = 1e6 + 10;
const
int maxv = 5e3 + 10;
const
double eps = 1e-9;
int sum[maxv];
int dp[maxv][maxv];
int main()
for(int j = 1; j <= n; j++)
}for(int i = 0; i <= n; i++)
}while(scanf("%d", &n) != eof)
return
0;}
第十四屆男籃世錦賽 8 29 9 8
2006年1月15日,2006年男籃世錦賽抽籤儀式東京當地時間15日下午3點舉行。中國男籃分在d組,再次遭遇到強大的美國隊,同組其他對手分別是波多黎各 斯洛維尼亞 義大利和塞內加爾隊,而d組的比賽將在日本札幌進行。來自五大洲24隊的代表參加了今天下午的抽籤儀式。由於中國男籃立陶宛籍主教練尤納斯正在希...
(補題心路)福州大學第十四屆程式設計競賽 重現賽
個人感覺是最短路大冒險 不知道為啥中暑了腦子反而活躍了起來,就是 實現非常gg fzu 2253 salty fish 漁夫翻鹹魚,會把乙個區間裡的1翻成0 0翻成1 區間長度至少為1 問最多有幾個1 統計原先的鹹魚數量 考慮每翻一次,如果本來是1 會使鹹魚數量 1,如果本來是0,會使鹹魚數量 1 ...
第十四屆智慧型車培訓 數碼管
數碼管顯示原理 tec9607 數碼管驅動晶元字元表 led驅動器tec9607引腳功能簡介 數碼管的控制埠及時序 數碼管控制原理總結 微控制器通過三個io口來控制tec9607 led驅動器,從而來完成對5個數碼管的控制。傳輸資料方式 序列通訊 三個io口的作用 1 si 序列輸入資料,由微處理器...