fill陣列填充
阿新 • • 發佈:2019-01-24
函式引數 fill(first,last,val),first,last 對應陣列的範圍,val為元素的值
fill 顧名思義 這個函式是用來填充的,例如我們想對一個數組賦值
#include<iostream> #include<bits/stdc++.h> using namespace std; int main(){ cout<<"一維陣列 "<<endl; int a[20]; int b[20]; char c[20]; float d[20]; fill(a,a+11,1); //賦值1 fill(b,b+11,2147483647); //賦值最大整型 2147483647 fill(c,c+11,'*'); //賦值 * fill(d,d+11,0.1); //賦值 0.1 for(int i=0;i<20;i++) cout<<a[i]<<" "; cout<<endl; for(int i=0;i<20;i++) cout<<b[i]<<" "; cout<<endl; for(int i=0;i<20;i++) cout<<c[i]<<" "; cout<<endl; for(int i=0;i<20;i++) cout<<d[i]<<" "; cout<<endl; cout<<"二維陣列 "<<endl; int mp[20][20]; fill(mp[0],mp[0]+20*20,5); for(int i=0;i<20;i++) { for(int j=0;j<20;j++) cout<<mp[i][j]<<" "; cout<<endl; } return 0; }
注意:填充量必須是常數
/* NYOJ737 石子合併(一)區間動態規劃 */ #include<bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f //#define inf 1<<20 const int maxn=210; int n,a[maxn]; int dp[maxn][maxn];//dp[i][j]表示從第i堆到第j堆合併的代價 int sum[maxn][maxn];//表示石頭的數量 int main() { ios::sync_with_stdio(0); while(cin>>n) { for(int i=1;i<=n;i++) cin>>a[i]; memset(sum,0,sizeof(sum)); //fill(dp[0],dp[0]+n*n,inf);//錯誤 fill(dp[0],dp[0]+maxn*maxn,inf);//fill填充量必須是常數 for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) //dp[i][j]=inf; cout<<dp[i][j]<<endl; for(int i=1;i<=n;i++) sum[i][i]=a[i],dp[i][i]=0; for(int len=1;len<n;len++){//區間長度 for(int i=1;i<=n&&i+len<=n;i++){//區間起點 int j=i+len;//區間終點 for(int k=i;k<=j;k++)//用k來表示分割區間 { sum[i][j]=sum[i][k]+sum[k+1][j]; dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]+sum[i][j]); } } } cout<<dp[1][n]<<endl; } return 0; }