【USACO06FEB】数字三角形

数塔三角形,dp入门题

#include"iostream"
#include"iomanip"
using namespace std;
int a[13][13];
int b1[13],b2[13];
//long long k[13];
int n;
int sum;
long long f=0;
int p=0;
void dfs(int);
int main(){
    //freopen("b.txt","w",stdout);
    for(int i=1;i<=12;i++){
        a[i][1]=1;
    }
    for(int i=1;i<=12;i++){
        for(int j=2;j<=i;j++){
            if(i%2==0&&j<=i/2||i%2!=0&&j<=i/2+1){
                a[i][j]=a[i-1][j-1]+a[i-1][j];
            }
            else{
                a[i][j]=a[i][i-j+1];
            }
            //k[i]=k[i]+a[i][j];
        }
    }
    cin>>n;
    cin>>sum;
    //if((k[n]+1)*n<=sum)return 0;
    dfs(1);
    return 0;
}
void dfs(int t){
    if(p==0){
        for(int i=1;i<=n;i++){
            if(b2[i]==0){
                b1[t]=i;
                b2[i]=1;
                f=f+b1[t]*a[n][t];
                //cout<sum){
                    b2[i]=0;
                    f=f-b1[t]*a[n][t];
                    return;	
                }
                if(t

你可能感兴趣的:(动态规划之序列dp)