1. 程式人生 > >fill陣列填充

fill陣列填充

函式引數 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;
}